FreeRTOS 软件定时器

← 返回 FreeRTOS | ← 主页


OSAL源码

文件作用
osal_timer.h公开接口
osal_internal_timer.h保存回调和参数
osal_timer.c创建记录与参数检查
os_impl_timer.cFreeRTOS实现

1. 开启软件定时器

FreeRTOSConfig.h

#define configUSE_TIMERS             1
#define configTIMER_TASK_PRIORITY    2
#define configTIMER_QUEUE_LENGTH     10
#define configTIMER_TASK_STACK_DEPTH 256

2. 定义回调

使用定时器的业务 .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 会在队列中延后释放保存回调和参数的内部记录。