sanfanzhu 发表于 2011-2-14 17:19:14

求助: 关于uCOS-II 多个周期性任务的实现

本人属于菜鸟级别的请各位高手帮帮忙
先假设有3个周期性的任务 T1,T2,T3 周期分别为10ms,20ms,30ms 优先级T1>T2>T3 也就是说当T3在运行的时候 T2的周期来了 T2就会抢占T3 同样的T1可以抢占T2,T3 这个周期具体要怎么实现? 仅仅是用 OSTimeDly( )或 OSTimeDlyHMSM( ) 来延时相应的时间来达到周期性吗 没有别的办法了吗

ba_wang_mao 发表于 2011-2-15 08:44:35

周期性任务只能使用OSTimeDly( )或 OSTimeDlyHMSM( )进行任务切换。

   只是延时时间需要注意。要确保 任务1和任务2退出CPU控制权后,任务3能够接管CPU。

sanfanzhu 发表于 2011-2-15 10:31:07

回复【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( )的话,是从该任务结束的时候开始延时,那要达到周期性运行的话,延时的时间是不是该任务的周期要减去任务执行的时间才对?? 因为一般的周期不都是从任务开始运行时开始计算的么?

ba_wang_mao 发表于 2011-2-15 10:47:20

那要达到周期性运行的话,延时的时间是不是该任务的周期要减去任务执行的时间才对?? 因为一般的周期不都是从任务开始运行时开始计算的么?
   
   1、那要达到周期性运行的话,延时的时间是不是该任务的周期要减去任务执行的时间才对??
      延时的时间和任务执行的时间没有任何关系,只跟《ostimedly(延时时间)》的入口参数“延时时间”有关系。

      应该是从调用系统函数:ostimedly(延时时间),开始计算时间。操作系统另外一个系统函数在节拍中断中开始递减计时单元的值,当计时单元的值减到0时,该周期性任务进入就绪状态,如果进入就绪状态后,该任务为最高优先级任务,则该任务将被再次调度。

   2、一般的周期不都是从任务开始运行时开始计算的么 ?
      参考上面的解释。

syuanwang 发表于 2011-2-15 10:54:11

低优先级任务被抢占之后,如果CPU占用率不很高的话,下次延时的时候就自动错开了,因为延时函数调用的时间不同。结果就是没有抢占了,大家都自己干自己的,干完睡觉,谁也不欺负谁。

John_Lee 发表于 2011-2-15 12:07:14

对于周期性任务,edf调度法比较适合。lz自己google一下:edf调度

sanfanzhu 发表于 2011-2-15 12:54:56

回复【5楼】John_Lee
对于周期性任务,edf调度法比较适合。lz自己google一下:edf调度
-----------------------------------------------------------------------

我这不才起步么,貌似也没有看到有关uCOS-II里用RM的参考材料,所以想试着先在uCOS-II里用RM调度做做看,一方面也能熟悉一下uCOS-II。 想等成功了下一步就换EDF调度的。

sanfanzhu 发表于 2011-2-15 15:05:53

回复【3楼】ba_wang_mao
-----------------------------------------------------------------------

有点明白了,谢谢

sanfanzhu 发表于 2011-2-15 15:06:59

回复【4楼】syuanwang
-----------------------------------------------------------------------

恩 延时函数调用的时间不同是关键

happyhd 发表于 2011-2-15 16:35:06

ucosii 里面有周期唤醒任务的函数,干什么不用啊?仔细看看datesheet先
页: [1]
查看完整版本: 求助: 关于uCOS-II 多个周期性任务的实现