FreeRTOS 里怎么用软件定时器?

RTOS · 5 浏览
FreeRTOS 里怎么用软件定时器?

回答(4)

如果定时器任务栈不够,回调里printf会溢出,建议栈设512以上,或者用日志缓冲异步输出。
嵌入式小飞 · 2026-08-18
补充:xTimerStart的第二个参数是阻塞等待命令队列的时间,一般设0或portMAX_DELAY,但注意守护任务优先级低时可能延迟生效。
码农阿强 · 2026-08-18
回调里千万别用vTaskDelay,会卡死整个定时器服务任务,其他定时器全废。我踩过坑,用xSemaphoreGiveFromISR代替。
老周嵌入式 · 2026-08-18
FreeRTOS软件定时器基于tick中断和守护任务实现,核心API是xTimerCreate()创建、xTimerStart()启动、xTimerStop()停止、xTimerChangePeriod()改周期。回调函数在定时器服务任务(configTIMER_TASK_STACK_DEPTH)上下文中执行,不能调用阻塞API(如vTaskDelay、队列读超时)。 实操步骤: 1. 在FreeRTOSConfig.h中确保configUSE_TIMERS=1,并设置configTIMER_TASK_PRIORITY(建议高于普通任务)。 2. 创建定时器: ```c TimerHandle_t myTimer = xTimerCreate("myTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, vTimerCallback); ``` pdTRUE表示自动重载(周期模式),pdFALSE为单次模式。 3. 在任务中启动:xTimerStart(myTimer, 0);回调中只做轻量操作,如发信号量或置标志位。 注意:若定时器回调需要访问共享资源,用互斥锁保护;若需高精度,改用硬件定时器。调试时可用uxTimerGetRemainingTime()查看剩余时间。
mcuku 阿沐 · 2026-08-18

🧰 配套工具

⏱️ 定时器计算器