请看程序注释
疑问1: 调度器上锁程序如下,其余程序和原子哥的教程4-1一样。
void LED0_task(void *p_arg) { u8 LED0_num=0; OS_ERR err; while(1) { LED0_num++; LED0=~LED0; printf("LED0任务ZHIX:%d\r\n",LED0_num);//上锁后,LED灯状态不变,但是此输出语句以非常快速快速输出。 按道理来说任务都已经上锁了,但是为啥此语句还能输出? if(LED0_num==150) { OSSchedLock(&err); printf("LED0任务上锁:%d\r\n",LED0_num);/ } OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); } }
疑问2:时间片轮转调度 修改部分如注释那句,其他程序和原子哥的实验历程 6-3 void task2_task(void *p_arg) { u8 i,task2_num=0; OS_ERR err; p_arg = p_arg; POINT_COLOR = RED; LCD_ShowString(30,150,110,16,16,"Task2 Run:000"); POINT_COLOR = BLUE; while(1) { task2_num++; LCD_ShowxNum(110,150,task2_num,3,16,0x80); for(i=0;i<5;i++) printf("Task2:56789\r\n"); LED1 = ~LED1; OSSchedRoundRobinYield(&err);//按道理来说,由此语句后,本任务的LED状态将不变化。可实际上,加不加本语句,状态都是一样的,这是为什么?? OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); } }
|