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

发布网友 发布时间:2022-04-27 04:22

我来回答

2个回答

热心网友 时间:2022-06-26 03:37

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、没必要去对它们的区别做出一个定义,关键还是去理解它们的应用场合,它们都能解决什么问题。

热心网友 时间:2022-06-26 03:37

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的商决定,我就不明白,这样到底有什么意思呢,两个相同功能的东西

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com