OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9314|回复: 5

stm32f103vc ucosii移植问题请教

[复制链接]

11

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
金钱
356
注册时间
2013-11-9
在线时间
145 小时
发表于 2014-5-29 23:09:11 | 显示全部楼层 |阅读模式
5金钱
大家好,我在stm32f103vc移植,移植程序是按照例程里面直接移植过来的。
创建两个任务,LED灯闪烁实验,编程软件用的是keil4,在keil里软件调试是正常的,任务相互切换。属于正常情况!

但是我将程序固化到单片机里就不能达到任务切换的效果,且任务执行一遍之后直接进入死循环HardFault_Handler();
我上网查过说是堆栈溢出的问题,但是没有加任务之前都是正常的,加任务也就是加了几个任务数组,我从128变为64,再由64变为30,还是不想,所以我感觉不是堆栈溢出的问题,还有就是
网上说是系统时钟的问题,我感觉程序设断点的时候在delay函数里面的ucos设置系统函数在初始化的时候已经运行了,应该不是系统时钟的问题,我实在想不通是哪个的问题,麻烦原子大哥详解?

部分程序如下:

//开始任务的优先级设置为最低
#define START_TASK_PRIO       10 
#define START_STK_SIZE   30
OS_STK START_TASK_STK[START_STK_SIZE];
void start_task(void *pdata);

//采集任务
//设置任务优先级
#define caiji_TASK_PRIO       7
#define caiji_STK_SIZE       30
OS_STK caiji_TASK_STK[caiji_STK_SIZE];
void caiji_task(void *pdata);


//时间任务
//设置任务优先级
#define jishi_TASK_PRIO       5 
#define jishi_STK_SIZE   30
OS_STK jishi_TASK_STK[jishi_STK_SIZE];
void jishi_task(void *pdata);

void caiji_task(void *pdata)  //采集时间的设定 
{  
  while(1)
   {
     //判断采集时间是否设定,设定的话运行if,否则运行else语句
     LED0=0;
     OSTimeDly(5);
    }    
}

void jishi_task(void *pdata)  //采集时间的设定 
{  
  while(1)
   {
     //判断采集时间是否设定,设定的话运行if,否则运行else语句
     LED0=0;
     OSTimeDly(1);
    }   
}
void start_task(void *pdata)
{
  //  OS_CPU_SR cpu_sr=0;
 //  INT8U err; 
 //#if (OS_TASK_STAT_EN > 0)
OSStatInit(); //初始化统计任务.这里会延时1秒钟左右
 //#endif 
 // OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)    
  OSTaskCreate(caiji_task,(void *)0,(OS_STK*)&caiji_TASK_STK[caiji_STK_SIZE],caiji_TASK_PRIO);   
 // OSTaskCreate(jishi_task,(void *)0,(OS_STK*)&jishi_TASK_STK[jishi_STK_SIZE-1],jishi_TASK_PRIO);
      OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
// OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
/* if (OS_ERR_NONE != err)
while(1)
;
OSTaskDel(OS_PRIO_SELF);  */
}

 int main(void)
 {
     SystemInit();
delay_init();     //延时函数初始化  
LED_Init();   //初始化与LED连接的硬件接口
     OSInit();   
  OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSStart();
 }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-5-29 23:30:03 | 显示全部楼层
这里看不出什么问题.

START_STK_SIZE,一般设置至少64.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
金钱
356
注册时间
2013-11-9
在线时间
145 小时
 楼主| 发表于 2014-5-30 08:35:00 | 显示全部楼层
我设置过START_STK_SIZE=64;不同的值我都设置过,256 或者128或者64,但是就是不知道为什么任务运行一遍之后就进入HardFault_Handler()死循环?
回复

使用道具 举报

11

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
金钱
356
注册时间
2013-11-9
在线时间
145 小时
 楼主| 发表于 2014-5-30 08:36:13 | 显示全部楼层
感觉不是堆栈的问题,我直接拿例程不做任何更改也是不行的,也会出现相同的问题!
回复

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-9-3
在线时间
9 小时
发表于 2014-12-8 22:52:21 | 显示全部楼层
楼主解决了吗?我也是遇到了这个问题,不知道怎么搞了。。。
回复

使用道具 举报

11

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
金钱
356
注册时间
2013-11-9
在线时间
145 小时
 楼主| 发表于 2014-12-18 08:52:39 | 显示全部楼层
回复【5楼】黑人张郎:
---------------------------------
是系统时钟的问题,还有你看看你的芯片是不是stm32f103vct6   因为103和107移植死不一样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-23 23:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表