存在4个问题,修改就可以了
(1)主要是在OSStart();前面缺少下列语句,系统老的时钟中断无任务切换功能:
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */
PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */
OS_EXIT_CRITICAL();
(2)printf()是DOS服务,不可重入,必须改成可重入的函数,如PC_DispStr()函数,或者写为
OS_ENTER_CRITICAL();
printf("this is App_one,prio=10,Delay 6 second and start again\n\n");
OS_EXIT_CRITICAL();
等就可以了。原来的系统自带的那几个test程序,就都没有使用printf()函数。
(3)另外OSTimeDlyHMSM(0,0,0,3000)是不允许的,要写为OSTimeDlyHMSM(0,0,3,0);
否则认为OSTimeDlyHMSM()参数无效而忽略,任务App_one不延时而长期循环,不切换。
(4)因为prio=10,20,30,所以OS_CFG.H中要至少定义
#define OS_LOWEST_PRIO 32
否则某些低优先级任务被认为无效,不参与切换。
你调试一下 是不能任务级任务切换 还是 中断级任务切换