iseafish 发表于 2014-12-31 10:02:58

STM32 IAR UCOS CSTACK 设置问题

各位坛友,我的ucosiii跑起来之后到startup之后任务运行不了,仿真后得出以下结果,是什么原因造成的?

系统部分的代码如下:

01
//main:
02
static OS_TCB   start_up_TCB;
03
static CPU_STKstart_up_STK;
04
void main(void)
05
{
06
   OS_ERR err;
07
   
08
   DISABLE_INTERRUPTS();   //disable all interrupts
09
   OSInit(&err);
10
   if(err!=OS_ERR_NONE)
11
   {
12
      while(1);
13
   }
14
   /*创建任务*/
15
    OSTaskCreate((OS_TCB   *)&start_up_TCB,                           //任务控制块指针         
16
               (CPU_CHAR   *)"Startup_Task",                              //任务名称
17
               (OS_TASK_PTR )start_up,                              //任务代码指针
18
               (void       *)0,                                 //传递给任务的参数parg
19
               (OS_PRIO   )start_up_prio,                           //任务优先级
20
               (CPU_STK    *)&start_up_STK,                        //任务堆栈基地址
21
               (CPU_STK_SIZE)COMMON_STK_SIZE/10,                              //堆栈剩余警戒线
22
               (CPU_STK_SIZE)COMMON_STK_SIZE,                                 //堆栈大小
23
               (OS_MSG_QTY)0,                                 //可接收的最大消息队列数
24
               (OS_TICK   )0,                                 //时间片轮转时间
25
               (void       *)0,                           //任务控制块扩展信息
26
               (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),//任务选项
27
               (OS_ERR   *)&err);                     //返回值
28
   
29
    OSStart(&err);
30
}
31
//startup:
32
void start_up(void *p_arg)
33
{
34
   OS_ERR err;
35
   p_arg=p_arg;
36
   
37
   bsp_init();                  //hardware init
38
   CPU_Init();                  //CPU init
39
   Init_SysTick();            //systick init
40
   ENABLE_INTERRUPTS();         //interrupts enable
41
   printf("\r\nstartup\r\n");
42
   OSTaskCreate((OS_TCB   *)&car_control_TCB,                         //任务控制块指针         
43
               (CPU_CHAR   *)"Car_Control",                               //任务名称
44
               (OS_TASK_PTR )car_control,                           //任务代码指针
45
               (void       *)0,                                 //传递给任务的参数parg
46
               (OS_PRIO   )car_control_prio,                            //任务优先级
47
               (CPU_STK    *)&car_control_STK,                     //任务堆栈基地址
48
               (CPU_STK_SIZE)COMMON_STK_SIZE/10,                              //堆栈剩余警戒线
49
               (CPU_STK_SIZE)COMMON_STK_SIZE,                                 //堆栈大小
50
               (OS_MSG_QTY)0,                                 //可接收的最大消息队列数
51
               (OS_TICK   )0,                                 //时间片轮转时间
52
               (void       *)0,                           //任务控制块扩展信息
53
               (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),//任务选项
54
               (OS_ERR   *)&err);                     //返回值
55
    //OSTaskDel(&Start_Up_TCB,&err);
56
   while(1);
57
}
58
//栈空间定义:
59
#define COMMON_STK_SIZE                  32

iseafish 发表于 2014-12-31 11:16:28

各位,我的问题解决了。应该先开中断后配置systick
页: [1]
查看完整版本: STM32 IAR UCOS CSTACK 设置问题