我在ARM7上运行了一些代码,首先我使用OSTaskCreateExt在main中创建启动任务,然后它将在启动任务中创建一些子任务,即AppTaskCreate的使用。但是在进入OSStatInit之后,它永远不会被回调并再次运行下一行。从调试中我发现,当进入OSStatInit一次时,启动任务从os调度的就绪任务表中删除,并且没有时间滴答响应负责改变就绪任务表的状态。所以它永远不会再次调试启动任务。在发现我在uc / os-ii内核中深入调试时间管理器之后。当在OSTmr_Task中运行代码时,它会保持中断并停在“OSSemPend(OSTmrSemSignal,0,& err)”行;“通过等待一些信号。所以我认为缺少一些信号来调用它。到最后,我想问一下造成我问题的原因是什么?
下面列出了一些代码:
int main (void)
{
BSP_IntDisAll();
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel" */
err = OSTaskCreateExt(AppTaskStart,
(void *)0,
(OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1],
APP_TASK_START_PRIO,
APP_TASK_START_PRIO,
(OS_STK *)&AppTaskStartStk[0],
APP_TASK_START_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
if(err != OS_NO_ERR) {
return 0;
}
#if (OS_TASK_NAME_SIZE > 13)
OSTaskNameSet(APP_TASK_START_PRIO, "Start Task", &err);
#endif
OSStart();
return 0;
}
static void AppTaskStart (void *p_arg)
{
(void)p_arg;
p_arg = p_arg; //avoid warning
BSP_Init(); /* Initialize BSP functions*/
OSStatInit(); /* Determine CPU capacity*/
AppTaskCreate(); /* Create application tasks */
OSTimeDlyHMSM(0,0,0,10);
OSTaskDel(OS_PRIO_SELF);
}
答案 0 :(得分:0)
感谢@D Krueger和@Clifford。这个问题有一个答案,因为我忘了在bsp上初始化计时器tick管理器。就是这样。