• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## 软件定时器介绍
2### 什么是软件定时器
3软件定时器是基于系统Tick中断而由软件来模拟的的定时器,其时间精准度为ms级别。
4
5### 为什么需要软件定时器
6各个产品上都有很多定时业务,但往往硬件定时器的资源是有限的,不能满足业务要求。为了满足用户需求,提供更多的定时器,UniProton操作系统提供了软件定时器功能。软件定时器扩展了定时器的数量,允许创建更多的定时业务。
7
8## 概念解释
9| 名称 | 解释说明 |
10| ---- | ---- |
11| 单次触发模式 | 只触发一次,之后不会再次触发 |
12| 周期触发模式 | 循环触发,每隔固定的时间间隔触发一次 |
13| 定时器周期 | 定时器的定时时间间隔,软件定时器单位是ms |
14| 超时处理函数 | 定时器回调函数 |
15
16## 运作机制
17软件定时器以Tick中断作为基本的计时单位,即软件定时器的时间间隔必须是Tick中断时间间隔的整数倍。例如,Tick中断的时间间隔是0.2ms,则软件定时器的时间间隔只能是interval * 0.2ms。
18
19由于软件定时器以Tick中断作为计数时钟,所以在Tick中断的处理中对软件定时器是否超时进行扫描。当扫描到超时的定时器后,调用该定时器的超时处理函数。
20
21流程:
221. 软件定时器初始化。对定时器所需内存分配、控制块数据和定时器链表结构进行初始化,并建立软件定时器的内部逻辑结构,为软件定时器的操作做好准备。
232. 创建软件定时器。先根据定时器管理器中的空闲定时器数是否大于>0,>0表示有空闲定时器,创建的时候先过滤不合法的参数,如果输入的参数合法,则从定时器空闲链表中取出一个定时器,对这个定时器设定超时时间、触发类型、超时处理函数和超时任务参数,并把定时器的状态设置为创建未启动状态,然后把定时器ID号写入返回参数。由返回参数把定时器ID号返回给创建者。这里要注意,设定的软件定时器的毫秒数转换成Tick数必须为整数。相应的ms转换成tick的公式为:每秒的Tick数*定时ms数/1000。
243. 启动软件定时器。启动定时器后,设置定时器状态为计时状态。
254. 超时扫描。对计时链表进行超时扫描,如果有定时器超时,则把所有超时定时器从计时链表中摘下来,对所有超时的定时器进行超时服务处理。
265. 处理超时服务。处理完超时服务后,如果定时器的触发模式是单次触发,则将该定时器设置为创建状态,否则把定时器挂到计时链表中,重新计数。
27