请问各位,ucos ii中的软件定时器和延时有什么区别?

比如说用OSTimeDlyHMSM我可以实现任务每100ms执行一次,那么用软件定时器有什么用?就是os_tmr.c中的函数有什么用?我没发现OSTimeDly或者OST... 比如说用OSTimeDlyHMSM我可以实现任务每100ms执行一次,那么用软件定时器有什么用?就是os_tmr.c中的函数有什么用?我没发现OSTimeDly或者OSTimeDlyHMSM调用os_tmr.c内的相关函数啊,那么这里面的函数是用来干嘛的?
OSTimeDly和OSTimeDlyHMSM是利用系统定时器来实现的,这跟os_tmr.c有什么关系?
展开
 我来答
weibaonuo
推荐于2017-11-28
知道答主
回答量:6
采纳率:0%
帮助的人:6.6万
展开全部
1、你调用OSTimeDly或者OSTimeDlyHMSM,意味着该任务CPU使用权会被没收,然而你开启一个定时器之后,该任务还可以使用CPU。
2、举例子:如下情景,可以使用软件定时器作超时处理,设备A管理设备B、C、E,设备A向设备BCE设备发送某一消息,如果在T时间内,设备BCE没有回应,设备A将重起并初始化BCE;那么可以在一个任务中,依次向BCE发送消息,并且启动软件动定时器TMRa,TMRb,TMRc,定时器时间到时调用各自的重起并初始化函数;另一方面,如果接收到BCE的消息则停止定时器TMRa,TMRb,TMRc。
3、然而如果用OSTimeDly或者OSTimeDlyHMSM处理上面的场景,可能要多开几个任务管理BCE并增加信号量通知OSTimeDly或者OSTimeDlyHMSM之后,到底是“重起并初始化BCE”还是什么都不做。
4、软件定时器和延时都是基于“系统的节拍”来计时/定时的,虽然软件定时器是在一个高优先级的任务中管理,这个任务也是由“系统节拍中断“中向其发送信号量,因此还是基于“系统的节拍”。
5、没必要去对它们的区别做出一个定义,关键还是去理解它们的应用场合,它们都能解决什么问题。
萌_7
2012-11-08 · 超过25用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:52.1万
展开全部
OSTimeDly和OSTimeDlyHMSM是利用系统的节拍来定时的,这个其实是利用了ARM自身的一个系统定时器来完成的,像STM32的话就是用它自己的一个24位系统定时器来作为ucos系统的节拍,而软件的定时器也就是ARM的定时器,其实就是它自己的16位或者是其他位的定时器,像STM32就有好多个16位的定时器,这个就是你说的软件定时器,它还有自己的一个24位的系统定时器,平时是不去接触的,正点原子在STM32的这个24位定时器这里讲解的挺好的,有空你可以去看看他的一些资料
追问
不是的,我看了源码了,这个os_tmr.c文件下的定时器也是利用时钟节拍的,而不是利用了STM32自带的其他的定时器,只不过它的频率可以与时钟节拍不一样,可以自己设定,由OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC的商决定,我就不明白,这样到底有什么意思呢,两个相同功能的东西
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式