开源组件 --- 软件定时器

1、git地址

https://github.com/0x1abin/MultiTimer
这是一个软件定时器的扩展模块,代码基于链表设计,我们可以利用一款硬件定时器来扩展出多个软件定时器,项目中使用的demo是liunx平台,我这里展示下无OS的MCU平台下实现软定时器的扩展。

2、组件应用

(1) 使用嘀嗒定时器来作为产生时间基准的时钟源,每1ms产生一个中断。

uint64_t u64SysTick = 0;

void SysTick_Handler(void)
{
	u64SysTick++;
}

uint64_t PlatformTicksGetFunc(void)
{
    return u64SysTick;
}

(2) 注册定时器模块驱动

MultiTimerInstall(PlatformTicksGetFunc);

(3) 应用定时器模块功能,该定时器是单次定时器,时间到达便会从链表中移除,如果需要循环调用的话,需要在回调里面再次注册定时器。

void exampleTimer1Callback(MultiTimer* timer, void *userData)
{
    printf("exampleTimer1Callback-> %s.\r\n", (char*)userData);
    MultiTimerStart(timer, 1000, exampleTimer1Callback, userData);
}

void exampleTimer2Callback(MultiTimer* timer, void *userData)
{
    printf("exampleTimer2Callback-> %s.\r\n", (char*)userData);
    MultiTimerStart(&timer2, 5000, exampleTimer2Callback, userData);
}

MultiTimerStart(&timer1, 1000, exampleTimer1Callback, "1000ms CYCLE timer");
MultiTimerStart(&timer2, 5000, exampleTimer2Callback, "5000ms CYCLE timer");

(4) 主循环调用

while (1)
{
    MultiTimerYield();
}

3、应用效果

在这里插入图片描述
从日志中看出,误差都相对比较小,误差主要取决于硬件定时器的时钟频率的精度偏差。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值