|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2014-8-12 09:58:18
|
显示全部楼层
我还找到了类似问题
http://zhidao.baidu.com/link?url ... ns0UFYO-00Lm9EXoQX_
问:
比如说用OSTimeDlyHMSM我可以实现任务每100ms执行一次,那么用软件定时器有什么用?就是os_tmr.c中的函数有什么用?我没发现OSTimeDly或者OSTimeDlyHMSM调用os_tmr.c内的相关函数啊,那么这里面的函数是用来干嘛的?
OSTimeDly和OSTimeDlyHMSM是利用系统定时器来实现的,这跟os_tmr.c有什么关系?
答:
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、没必要去对它们的区别做出一个定义,关键还是去理解它们的应用场合,它们都能解决什么问题。 |
|