ucos-ii任务调度时间和任务执行时间的关系问题

andylauren 2012-11-13 11:24:05
刚刚学习ucos,有个问题想不明白,我有一个需要4ms实时控制的函数,也就是这个函数加上处理时间和延时时间需要4ms调用一次,同时,程序还有其他的需要处理。我看了一下ucos默认的调度时间是10ms,是不是10ms才会去查看一下就绪任务的优先级,进行任务切换,如果我的4ms的任务在过程中被挂起了,但是马上就绪了,是不是有可能10ms后才被执行。


但是我也进行了OSTimeDlyHMSM函数的实验 ,这个函数在最低优先级任务中设置为2ms也可以正常运行,有没有老师能给解惑一下,小弟感激不尽。
...全文
1636 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lr2131 2012-12-07
  • 打赏
  • 举报
回复
如果你配置的系统调度最小时间是10ms,那小于10ms的实时性是保证不了的。但你说确实是按4ms输出波形,很可能是你配置的系统调度最小时间不是10ms。也有可能是CPU的真实时钟高于代码中的时钟。LZ你可以把这个系统调度最小时间改大到100ms,再试试就能确定是不是这个问题了。
Picasot 2012-12-07
  • 打赏
  • 举报
回复
1. 任务周期是可以自定义的,在 os_cfg.h 内指定。关键问题是你在什么芯片上运行,不同的芯片的定时中断实现方法不一样。可能需要你自己修改相应代码来达到指定的时间精度。 2. 每个任务周期绝对会发生一次任务调度,但不一定只发生一次。在两个周期之间发生了中断调用,就可能会引起额外的调度,此时高优先级的任务将再次剥夺低优先级任务的执行时间。即是说指定4ms周期,但任务被执行的频率会更高。 3. 如果任务周期太短,芯片处理速度不够,低优先级任务的执行频率可能比设定的低,甚至完全无机会执行。 4. 任务周期不保证绝对精确。因为通常定时中断都不能设为最优先,其它高优先级的中断会造成任务调度的延迟。只能保证任务调度频率符合指定值,但每两次调度的间隔时间可能不一样。 要做到 4ms 调度一次,首先要保证定时中断的设定是正确的,然后不能在任何定时中断外的地方造成额外调度,最后要求所有任务的总运行时间不超过单个时间片。
1586874907 2012-12-06
  • 打赏
  • 举报
回复
提高该任务的优先级,用定时中断
Dirk 2012-11-28
  • 打赏
  • 举报
回复
那是系统建议的时间片,太短会造成任务调度开销大。如果你非得要用一个很短的时间,将事务放到定时中断函数里。也可以就用那个时间调度,就看你任务设计是否合理了。
zhujinqiang 2012-11-28
  • 打赏
  • 举报
回复
为什么不用定时中断呢?
lbing7 2012-11-27
  • 打赏
  • 举报
回复 1
硬的定时,还是用定时器。。。 你懂的。
zhaozilan_ly 2012-11-26
  • 打赏
  • 举报
回复 1
1、当你进行任务切换,不用等10ms。直接会切换到优先级高的任务中。 2、“ucos默认的调度时间是10ms”这个时间应该是时钟周期。
aydf1 2012-11-13
  • 打赏
  • 举报
回复
用定时中断不行吗?
embzheng 2012-11-13
  • 打赏
  • 举报
回复
那就是你的周期不是10ms,去看看你自己给ucos的定时周期
andylauren 2012-11-13
  • 打赏
  • 举报
回复
引用 3 楼 embzheng 的回复:
最小时间片是10ms,OSTimeDlyHMSM这个函数你仔细看他的实现就知道了,它是四舍五入,4ms舍5ms当10ms
我用OSTimeDlyHMSM这个函数控制引脚高低电平,使用示波器测试却是是2ms,并没有四舍五入?
embzheng 2012-11-13
  • 打赏
  • 举报
回复
最小时间片是10ms,OSTimeDlyHMSM这个函数你仔细看他的实现就知道了,它是四舍五入,4ms舍5ms当10ms
dsoyy 2012-11-13
  • 打赏
  • 举报
回复
将该任务优先级提到最高,系统演示函数为4ms即可;或者采用定时器中断。

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧