FreeRTOS 软件定时器
OSAL源码
| 文件 | 作用 |
|---|---|
| osal_timer.h | 公开接口 |
| osal_internal_timer.h | 保存回调和参数 |
| osal_timer.c | 创建记录与参数检查 |
| os_impl_timer.c | FreeRTOS实现 |
1. 开启软件定时器
FreeRTOSConfig.h
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY 2
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH 2562. 定义回调
使用定时器的业务
.h
static void sample_timer_callback(osal_timer_handle_t timer, void *argument)
{
(void)timer;
(void)argument;
/* 到期处理 */
}回调运行在 FreeRTOS 定时器服务任务中,不能执行长时间阻塞操作。
3. 创建并启动
使用定时器的业务
.c
static osal_timer_handle_t sample_timer = NULL;
osal_timer_create("SampleTimer",
osal_ms_to_ticks(1000U),
true,
sample_timer_callback,
NULL,
&sample_timer);
osal_timer_start(sample_timer, 0U);true 表示自动重载,false 表示单次定时器。
4. 控制
使用定时器的业务
.c
osal_timer_stop(sample_timer, 0U);
osal_timer_reset(sample_timer, 0U);
osal_timer_change_period(sample_timer,
osal_ms_to_ticks(500U), 0U);5. 删除
使用定时器的业务
.c
osal_timer_delete(sample_timer, 0U);
sample_timer = NULL;删除命令进入 FreeRTOS 定时器队列后,OSAL 会在队列中延后释放保存回调和参数的内部记录。