OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 1177|回复: 3

UCOS延时函数和CPU使用权问题

[复制链接]

  离线 

3

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-6-7
在线时间
4 小时
发表于 2018-6-7 21:10:14 | 显示全部楼层 |阅读模式
1金钱
我是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使用权的么?为什么可以在延时期间去干别的事?或者是直接去执行了其他任务,那延时又是怎么精确延时的呢?

最佳答案

查看完整内容[请看2#楼]

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

使用道具 举报

  离线 

511

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133754
金钱
133754
注册时间
2010-12-1
在线时间
1280 小时
发表于 2018-6-7 21:10:15 | 显示全部楼层
你要了解OS有原理才行。
简单说,OS有个心跳,比如每5ms执行 1次。
那么每秒钟OS至少可以进行200次任务切换。
5ms中断就是所谓的系统心跳。
比如你任务要延时503ms,那么可以分成5*100+3,500ms使用系统心跳实现延时(这个处理就是OS的精髓了)、这个500ms延时就由OS托管,OS会给任务做标记,当开始延时时,任务进入挂起状态,然后等到100次调度完成,OS就会再启动任务,完成500ms延时,然后剩下的3ms,就死等了。

所以延时最好是系统心跳的整数倍,这就不会浪费CPU。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

  离线 

3

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-6-7
在线时间
4 小时
 楼主| 发表于 2018-6-7 21:11:40 | 显示全部楼层
任务1、2指的是task1和task2,有点歧义,抱歉
回复

使用道具 举报

  离线 

3

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-6-7
在线时间
4 小时
 楼主| 发表于 2018-6-8 14:32:37 | 显示全部楼层
正点原子 发表于 2018-6-7 21:10
你要了解OS有原理才行。
简单说,OS有个心跳,比如每5ms执行 1次。
那么每秒钟OS至少可以进行200次任务切 ...

谢谢原子哥
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-19 23:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */