写了段代码对结果很不解。关于ucos的。求指导
void Task_Start(void *p_arg)
{
(void)p_arg; // 'p_arg' 并没有用到,防止编译器提示警告
OSTaskCreate(Task_LED2,(void *)0, //创建任务2
&task_led2_stk, TASK_LED2_PRIO);
OSTaskCreate(Task_LED3,(void *)0, //创建任务3
&task_led3_stk, TASK_LED3_PRIO);
while (1)
{
LED1( ON );
OSTimeDlyHMSM(0, 0,0,300);
LED1( OFF);
OSTimeDlyHMSM(0, 0,0,300);
}
}
//任务2
void Task_LED2(void *p_arg)
{
(void)p_arg;
while (1)
{
LED2( ON );
OSTimeDlyHMSM(0, 0,0,300);
LED2( OFF);
OSTimeDlyHMSM(0, 0,0,300);
}
}
//任务3
void Task_LED3(void *p_arg)
{
(void)p_arg;
while (1)
{
LED3( ON );
OSTimeDlyHMSM(0, 0,0,300);
LED3( OFF);
OSTimeDlyHMSM(0, 0,0,300);
// LED4( ON );
// OSTimeDlyHMSM(0, 0,0,300);
// LED4( OFF);
// OSTimeDlyHMSM(0, 0,0,300);
}
}
本来以为led1,2,3会交替闪,结果却是同时亮灭,这是为什么?
优先级是这样的
#define TASK_LED2_PRIO 5
#define TASK_LED3_PRIO 6 这个结果是正确的 john_lee 发表于 2013-12-4 19:15 static/image/common/back.gif
这个结果是正确的
是不是OSTimeDlyHMSM(0, 0,0,300)在进行任务调度的同时,把调用它的任务从就绪表中清除了? OSTimeDlyHMSM(0, 0,0,300)时该任务可以理解是挂起的状态,会去执行其他就绪的任务直到时间延时结束才会重新执行,所以结果是同时亮灭。 实际上是有先后顺序的,但是先后顺序时间太短,所以你看不出来。任务2刚挂起,任务三就开始继续执行,此时任务1还在挂起状。想要实现led1,2,3会交替闪,需要在程序里面控制,上面程序是不行的。 执行到OSTimeDlyHMSM(0, 0,0,300)的时候CPU就去干别的事了(任务调度,去执行别的任务了),CPU可不会傻傻的在那等那个延时结束 木叶小镇 发表于 2013-12-9 09:21 static/image/common/back.gif
实际上是有先后顺序的,但是先后顺序时间太短,所以你看不出来。任务2刚挂起,任务三就开始继续执行,此时 ...
赞一个
页:
[1]