文章概要
- 〇、背景
- 一、基本思路
-
- 1.1 定时器的结构定义
- 1.2 定时器的状态变换
- 1.3 定时器的时钟更新
- 二、代码实现
-
- 2.1 定时器的结构定义
- 2.2 定时器的状态更新
- 2.3 定时器的启停控制
- 2.4 定时器的状态获取
- 2.5 定时器的时钟系统
- 2.6 定时器的初始化
- 三、定时器功能测试
-
- 3.1 测试源码
- 3.2 测试效果
- 四、源码下载
〇、背景
基于上一篇博文:Linux环境下的setitimer的延时/定时器的使用,我们已经了解定时器 setitimer setitimer 在同一个进程中只能使用一个的缺点,作为一个嵌入式的开发人员总觉得有点说不出的苦恼,那么本博文将基于这种力不从心的苦恼,编写一个满足基本要求的软件定时器。
这样做同样存在一个缺点,就是如果传入的参数无效,比如定时器的指针为NULL,或者定时器的数量过大(指的是超过实际定义的数量)等情况,那么将会导致进程异常奔溃。
2.3 定时器的启停控制
在启动定时器的时候,需要告诉定时器当前的系统时钟值,便于定时器在运行过程中监控已经经历的时间,当前计数值加上定时的时间间隔即可得到定时器的超时的时间,所以启动定时器的功能函数可以如下编写。
不光要启动定时器,而且还要在需要的时候能够停止定时器,有些异常的场合则需要在定时器运行的过程中停止定时器来保护上下文,所以,定时器停止功能即修改定时器的状态即可。代码实现如下所示。
2.4 定时器的状态获取
在定时器中的运行中已经在实时的更新定时器的状态,并且在一些情况下可能会停止定时器,那么同样的在一些时候需要判断定时器的状态从而进行下一步的操作。所以定时器的状态函数可以直接返回其状态。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!