我在ARM7上运行了一些代码,首先我使用OSTaskCreateExt在main中创建启动任务,然后它将在启动任务中创建一些子任务,即AppTaskCreate的用法。但是在进入 OSStatInit 后它永远不会被回调并再次运行下一行。通过调试发现,一旦进入OSStatInit,启动的Task就会从os schedule的就绪任务表中删除,并且逐步没有时间滴答响应负责改变就绪任务表的状态。所以它永远不会再次安排启动任务。在发现我深入调试 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);
}