夜雨聆风学习资料网

ARTICLE · 1039240

软件定时器根本不是定时器:FreeRTOS 如何

软件定时器根本不是定时器:FreeRTOS 如何

软件定时器根本不是定时器:FreeRTOS 如何

FreeRTOS 的软件定时器根本不是硬件定时器。它没计数器、没比较器,全靠一条命令队列、一个守护任务和两条有序链表撑着。

它的全部家当就是一个 Timer_t 结构体。启动、停止、重置这些 API,其实只是往队列里塞了一条带时间戳的消息。守护任务单线程处理,到期时间直接算好存在链表节点里。0 个定时器和 100 个定时器,CPU 占用都是零。

不过这机制也埋了三个大坑。回调跑在守护任务的 512B 栈上,里面敢写 printf 就会栈溢出死循环。xTimerStart 返回成功只代表消息发出去了。还有 xTimerReset,它是把到期时间往后推。要是你每 400ms 喂一次 1s 超时的狗,它就永远不到期。

所以选型很简单:要微秒级精度用硬件定时器;到点要干重活就自建任务;而翻灯、喂狗这种轻量操作,交给软件定时器最划算。

原文软件定时器根本不是定时器:FreeRTOS 如何用零 CPU 管 100 个定时器
收录于FreeRTOS学习
作者提示: 个人观点,仅供参考
广东,42分钟前,

相关学习资料