|
发表于 2011-6-4 01:48:07
|
显示全部楼层
LZ你还没有理解task_switch();怎么用。
如果你的delay是
while(i--);
这种形式的话
依照你这么写肯定是顺序执行的,你的实验结果和你的代码是相符的。
因为那个delay语句,CPU还是在这里等着,无聊地等着,等到你这个任务的末尾,才切换,跟顺序执行当然是相同的。
你应该把delay改一下。
你还需要一个时基,用定时器来做,提供系统的绝对时间
比如你每1ms 定时器触发一次,然后累加 task1_Clock 这个变量
然后你的delay改成这样
delay1()
{
while(task1_Clock < 500)task_switch(); //这句话得意义就是,在没达到你想要的延时之前,切换掉这个任务,让CPU去处理task2或者其他
task1_Clock = 0;
}
时间长的任务应该在其中多加入 task_switch(); ,那个回复的人肯定没仔细看帖子,帖子里面已经明确的说明了,比如显示驱动这种耗时长的,分开几段,切换出去。
主要就是在你每个任务里面,多用几个task_switch();
不用的话,没意义。
你的这段程序,换上我的delay 就会变成这样,看注释
void task1()
{
while(1)
{
LED_1 = 1;
delay1(); //你原来会在这里等待delay结束,换上我的,就会不断地切换出去,直到达到delay里的设定时间,我的delay是0.5秒,你也可以用变量写
LED_1 = 0;
delay1(); //切换到其他任务
task_switch(); //这句可以不要了,因为我的delay里面已经有了task_swicth
}
}
void task2()
{
while(1)
{
LED_2 = 1;
delay2(); //切换任务。不在这里死等
LED_2 = 0;
delay2(); //切换任务
task_switch();
}
} |
|