我有些uc/os-II的代码,基于ARM7的,主要是想用板子来采集一些数据。首先我在main里面建立了开始任务,这个开始任务函数里面会创建其他的几个任务。可以下面的代码。但是在OSStatInit函数进去以后,就再也出不来了,内核停留在空闲任务的死循环里面。说明这个时候,没有任何其他高优先级的任务处于就绪状态。应该不至于啊,我设置了我的几个任务的优先级都比空闲任务高的。后面调试发现,系统没有响应OnTimeTick函数,为什么这个函数一次都执行不了?
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); }
OnTimeTick是系统时钟节拍中断服务响应函数。如果没有执行,说明时钟设置有问题。后来也确实证明是这样的,因为我把原来工程代码里面,初始化时钟的一行代码注释掉了。