uC/OS-ii中所有任务如何合理的分配延时节拍时间,使得任务能够正常运转?
uC/OS-ii中:周期性执行任务的代码如下:voidMyTask (void *pdata) //周期性执行的任务函数
{
进行准备工作的代码;
for (;;) //无限循环,也可用 while (1)
{
任务实体代码;
OSTimeDly( )
}
}
有四个周期性执行的任务,任务A(优先级=0)、任务B(优先级=1)、任务C(优先级=2)、任务D(优先级=3)
如果每个任务的延时节拍时间OSTimeDly( )设置的不合理,可能会导致永远也执行不到“任务D”
有没有设置“延时节拍时间OSTimeDly( )”的一般方法呢? 提问的不错,等大虾! 那就看你的优先级设置了 我请教的是有没有一种“经验”或者大概的算法? http://www.docin.com/p-1331635.html 回复【4楼】John_Lee
http://www.docin.com/p-1331635.html
-----------------------------------------------------------------------
能否帮忙下载,给个链接呢?我没有积分,下不下来呀! 一般OSTimeDly(1) 如果相关可以OSQPend 不用OSTimeDly 回复【6楼】chinaye1
一般ostimedly(1) 如果相关可以osqpend 不用ostimedly
-----------------------------------------------------------------------
6楼,我说的是周期性执行任务,而不是事件任务(事件任务有:等待信号、等待消息、等待邮箱)。
而周期性任务的结构如下:
voidMyTask (void *pdata) //周期性执行的任务函数
{
进行准备工作的代码;
for (;;) //无限循环,也可用 while (1)
{
任务实体代码;
OSTimeDly( )
}
}
通过执行“OSTimeDly( ) ”进行任务切换;或者进入中断服务程序进行任务切换。 我顶! UCOSII 中如何分配任务之间的延时节拍时间,确保任务之间合理的调度。
防止出现如下现象: 三个任务:任务A(优先级=0)、任务B(优先级=1)、任务C(优先级=2)
(1). 任务A执行完毕,执行任务B,
(2).任务B执行完毕,执行任务A
(3). 任务A执行完毕,再次执行任务B,
最终导致任务C始终无法得到CPU的控制权。
--------------------------------------------------------------------------------------
只要确保在A进行延时的时间内,B能够执行所要执行的任务代码,并进入延时,这就能够保证C任务可以分配到时间。
一般情况下,在保证应用可靠的情况下,任务都尽可能少的占用处理器,能延时就尽量迟时,能延时多久,就延时多久,这样可以保证系统低优先级任务的运行顺畅。 学习 这个也是我最近研究的东西, 9楼说的不错 mark 学习了。谢谢 学习了!!!!谢谢!!! 以前碰到过这个问题,也不知道怎么解决。现在好好学习下 还是不太了解啊!
页:
[1]