在线时间563 小时
UID3072817
ST金币513
蝴蝶豆93
注册时间2014-11-6
该用户从未签到
版主
- 最后登录
- 2020-9-9
|
本帖最后由 Inc_brza 于 2017-7-20 19:25 编辑
前言:这里不谈RTOS,而是主要针对裸机开发,很多时候,我们发现硬件定时器是不够用的,于是乎,很多时候,
程序员都会利用一个硬件定时器来产生N个软件定时器,误差是肯定有的,但是误差范围是可接受的,这样,
就能解决了很多时候定时器不够用的场合。
当然,楼主也遇到这种时候,所以就临时写了个软件定时器。
主题:这个软甲定时器采用了数组+回调的机制,硬件定时器产生tick,而主循环中获取tick产生计数,计数到达之后
调用定时器对应的回调函数。其中包含删除,注册的功能。
数据结构
- typedef struct soft_timer {
- uint32_t timer_count; //定时器用的计数器
- uint32_t time_out; //阀值
- void (*time_out_callback)(void *param); //回调函数
- void *param; //回调函数参数
- uint8_t timer_flag; //定时器属性标志
- }soft_timer_t;
复制代码 原理很简单,主循环timer_count不断的自减,到0的时候就调用一次函数,不停循环。
以上是使用到的api接口,分别是注册,删除,初始化,中断调用,主循环任务函数,
一下是源码:
总结,虽然误差是肯定有的,但是由于误差可接受,所以用起来还是很方便的,如果哪里写的不好,还请给点意见!
|
评分
-
查看全部评分
|