【RTOS】快速体验FreeRTOS所有常用API(8)软件定时器

快速体验FreeRTOS所有常用API(1)工程创建
快速体验FreeRTOS所有常用API(2)任务管理
快速体验FreeRTOS所有常用API(3)同步与互斥
快速体验FreeRTOS所有常用API(4)队列
快速体验FreeRTOS所有常用API(5)信号量、互斥量
快速体验FreeRTOS所有常用API(6)事件组
快速体验FreeRTOS所有常用API(7)任务通知
快速体验FreeRTOS所有常用API(8)软件定时器
快速体验FreeRTOS所有常用API(9)中断管理
快速体验FreeRTOS所有常用API(10)资源管理
快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

八、软件定时器

该部分在上份代码基础上修改得来,代码下载链接:

https://wwzr.lanzout.com/iUJoJ1la3a5g

密码:btvh

该代码尽量做到最简,不添加多余的、不规范的代码。

内容主要包括

  • 软件定时器的基本概念、创建、启动、修改周期

最终实现效果:

  • 在任务1中启动定时器,设置周期为5s,5s后触发定时器回调函数,删除任务1。

img

8.1 基本概念

FreeRTOS中的软件定时器是一种在任务中运行的定时器,通过 FreeRTOS 内核提供的软件定时器服务实现。软件定时器允许你在任务中创建、启动、停止和删除定时器,以执行一些任务或回调函数。

使用场景

注意点:定时器的****回调函数是在守护任务中被调用的,守护任务不是专为某个定时器服务的,它还要处理其他定时器。

所以,定时器的回调函数不要影响其他人:

  • 回调函数要尽快实行,不能进入阻塞状态
  • 不要调用会导致阻塞的API函数,比如 vTaskDelay()
  • 可以调用 xQueueReceive() 之类的函数,但是超时时间要设为0:即刻返回,不可阻塞

8.2 创建软件定时器

TimerHandle_t xTimer = xTimerCreate("Timer",        // 定时器名称
                                   pdMS_TO_TICKS(1000),  // 定时器周期,单位是时钟节拍
                                   pdTRUE,              // 定时器自动重载 pdTRUE or pdFALSE
                                   NULL,           // 定时器ID,可以用于传递附加信息
                                   vTimerCallback);     // 定时器回调函数

示例:

// 定义定时器句柄
static TimerHandle_t g_xTimerTest;

// 创建软件定时器 周期为5s 不自动重载
g_xTimerTest= xTimerCreate("Timer", pdMS_TO_TICKS(5000), pdFALSE, NULL, vTimerCallbackTest);
        
// 声明定时器回调函数
void vTimerCallbackTest(TimerHandle_t xTimer);
// 定义定时器回调函数
void vTimerCallbackTest(TimerHandle_t xTimer) 
{
    // 定时器超时后执行的操作
}

8.3 启动软件定时器

使用 xTimerStart 函数启动软件定时器。

// 启动软件定时器
xTimerStart(g_xTimerTest, portMAX_DELAY);

注意,这些函数的 xTicksToWait 表示的是,把命令写入命令队列的超时时间。命令队列可能已经满了,无法马上把命令写入队列里,可以等待一会。

xTicksToWait 不是定时器本身的超时时间,不是定时器本身的"周期"。

创建定时器时,设置了它的周期(period)。

8.4 实例

创建

img

启动

img

回调

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值