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