完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我是UCOS初学者,以前也没有学过任何RTOS,望大神说的仔细些。
我所理解的UCOS任务调度都是在延时函数中实现的, 假设我定义了三个函数:1-start_task ; 2-task1; 3-task2。 在任务1、2的while语句里面都有自己的“具体任务语句”(比如让led翻转)以及一个HMSM延时函数(1s延时),任务1在执行完“具体任务语句”后进入自己的HMSM,此时发生任务切换进行任务2,任务2执行完自己的“具体任务语句”后也进入自己的HMSM中。 问题是: 1、这两个HMSM的一秒延时究竟是怎么协调的,最终实现的一秒延时是两个延时同时进行的么? 2、还有在进行延时函数的时候是不占用CPU使用权的么?为什么可以在延时期间去干别的事?或者是直接去执行了其他任务,那延时又是怎么精确延时的呢? |
|
相关推荐
3个回答
|
|
你要了解OS有原理才行。
简单说,OS有个心跳,比如每5ms执行 1次。 那么每秒钟OS至少可以进行200次任务切换。 5ms中断就是所谓的系统心跳。 比如你任务要延时503ms,那么可以分成5*100+3,500ms使用系统心跳实现延时(这个处理就是OS的精髓了)、这个500ms延时就由OS托管,OS会给任务做标记,当开始延时时,任务进入挂起状态,然后等到100次调度完成,OS就会再启动任务,完成500ms延时,然后剩下的3ms,就死等了。 所以延时最好是系统心跳的整数倍,这就不会浪费CPU。 |
|
|
|
任务1、2指的是task1和task2,有点歧义,抱歉
|
|
|
|
谢谢原子哥
|
|
|
|
只有小组成员才能发言,加入小组>>
949 浏览 0 评论
1244 浏览 1 评论
2606 浏览 5 评论
2953 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2821 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1401浏览 3评论
255浏览 2评论
526浏览 2评论
437浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
510浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-5 09:55 , Processed in 1.206440 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191