嵌入式学习小组
直播中

冉屹芳

7年用户 144经验值
私信 关注

UCOS延时函数怎么协调?

我是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)

黄锐

2020-4-8 09:56:45
你要了解OS有原理才行。
简单说,OS有个心跳,比如每5ms执行 1次。
那么每秒钟OS至少可以进行200次任务切换。
5ms中断就是所谓的系统心跳。
比如你任务要延时503ms,那么可以分成5*100+3,500ms使用系统心跳实现延时(这个处理就是OS的精髓了)、这个500ms延时就由OS托管,OS会给任务做标记,当开始延时时,任务进入挂起状态,然后等到100次调度完成,OS就会再启动任务,完成500ms延时,然后剩下的3ms,就死等了。
所以延时最好是系统心跳的整数倍,这就不会浪费CPU。
举报

胡书琴

2020-4-8 10:01:58
任务1、2指的是task1和task2,有点歧义,抱歉
举报

蒋牛钱

2020-4-8 10:09:51
谢谢原子哥
举报

更多回帖

发帖
×
20
完善资料,
赚取积分