完善资料让更多小伙伴认识你,还能领取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,有点歧义,抱歉
|
|
|
|
谢谢原子哥
|
|
|
|
只有小组成员才能发言,加入小组>>
148 浏览 0 评论
948 浏览 1 评论
2340 浏览 5 评论
2659 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2469 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
510浏览 9评论
523浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
623浏览 6评论
498浏览 5评论
535浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-4 23:18 , Processed in 1.104104 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191