求助: 关于uCOS-II 多个周期性任务的实现
本人属于菜鸟级别的请各位高手帮帮忙先假设有3个周期性的任务 T1,T2,T3 周期分别为10ms,20ms,30ms 优先级T1>T2>T3 也就是说当T3在运行的时候 T2的周期来了 T2就会抢占T3 同样的T1可以抢占T2,T3 这个周期具体要怎么实现? 仅仅是用 OSTimeDly( )或 OSTimeDlyHMSM( ) 来延时相应的时间来达到周期性吗 没有别的办法了吗 周期性任务只能使用OSTimeDly( )或 OSTimeDlyHMSM( )进行任务切换。
只是延时时间需要注意。要确保 任务1和任务2退出CPU控制权后,任务3能够接管CPU。 回复【1楼】ba_wang_mao
周期性任务只能使用ostimedly( )或 ostimedlyhmsm( )进行任务切换。
只是延时时间需要注意。要确保 任务1和任务2退出cpu控制权后,任务3能够接管cpu。
-----------------------------------------------------------------------
我想要的结果是任务1和2正常被调度,然后让任务1和2的周期尽量的小,使任务3不被调度,在屏幕上打印“TASK X has been scheduled!” 但是怎么试任务3总能被调度,周期设1 tick都没用 不知道怎么回事,是因为软实时的原因吗?可以改硬实时吗?应该怎么改法?
另外,用ostimedly( )或 ostimedlyhmsm( )的话,是从该任务结束的时候开始延时,那要达到周期性运行的话,延时的时间是不是该任务的周期要减去任务执行的时间才对?? 因为一般的周期不都是从任务开始运行时开始计算的么? 那要达到周期性运行的话,延时的时间是不是该任务的周期要减去任务执行的时间才对?? 因为一般的周期不都是从任务开始运行时开始计算的么?
1、那要达到周期性运行的话,延时的时间是不是该任务的周期要减去任务执行的时间才对??
延时的时间和任务执行的时间没有任何关系,只跟《ostimedly(延时时间)》的入口参数“延时时间”有关系。
应该是从调用系统函数:ostimedly(延时时间),开始计算时间。操作系统另外一个系统函数在节拍中断中开始递减计时单元的值,当计时单元的值减到0时,该周期性任务进入就绪状态,如果进入就绪状态后,该任务为最高优先级任务,则该任务将被再次调度。
2、一般的周期不都是从任务开始运行时开始计算的么 ?
参考上面的解释。 低优先级任务被抢占之后,如果CPU占用率不很高的话,下次延时的时候就自动错开了,因为延时函数调用的时间不同。结果就是没有抢占了,大家都自己干自己的,干完睡觉,谁也不欺负谁。 对于周期性任务,edf调度法比较适合。lz自己google一下:edf调度 回复【5楼】John_Lee
对于周期性任务,edf调度法比较适合。lz自己google一下:edf调度
-----------------------------------------------------------------------
我这不才起步么,貌似也没有看到有关uCOS-II里用RM的参考材料,所以想试着先在uCOS-II里用RM调度做做看,一方面也能熟悉一下uCOS-II。 想等成功了下一步就换EDF调度的。 回复【3楼】ba_wang_mao
-----------------------------------------------------------------------
有点明白了,谢谢 回复【4楼】syuanwang
-----------------------------------------------------------------------
恩 延时函数调用的时间不同是关键 ucosii 里面有周期唤醒任务的函数,干什么不用啊?仔细看看datesheet先
页:
[1]