FreeRTOS 体验教程:9.FreeRTOS的定时器初体验

FreeRTOS 定时器使用教程

定时器(Timer)是 FreeRTOS 提供的一种用于定时执行任务的机制。本文将详细介绍如何在 FreeRTOS 中使用动态和静态定时器,讲解其配置和常见问题的解决方法。

1. 添加定时器头文件

首先,需要包含定时器相关的头文件:

#include "timers.h"

image.png

2. 动态创建定时器

动态创建定时器的函数为 xTimerCreate,其返回值是定时器句柄:
image.png

3. 静态创建定时器

静态创建定时器的函数为 xTimerCreateStatic,它需要预先分配定时器所需的内存:
image.png

4. 包含示例函数定义的 mytimer.h 头文件

image.png

5. 创建定时器任务

在主程序或初始化函数中创建定时器任务。
image.png

6. 编译出错

如果在编译过程中出现错误,请参考以下步骤解决。

6.1 错误 1:未定义函数错误

image.png

6.2 解决方案:启用 configUSE_TIMERS

定时器相关的函数受控于 configUSE_TIMERS 宏。默认情况下,该宏未启用。请在 FreeRTOSConfig.h 中启用此宏:
image.png
image.png
image.png

#define configUSE_TIMERS 1

6.3 错误 2:configTIMER_TASK_PRIORITY 未启用

image.png

6.4 解决方案:启用 configTIMER_TASK_PRIORITY

image.png

#define configTIMER_TASK_PRIORITY 1

6.5 错误 3:configTIMER_QUEUE_LENGTH 等宏未启用

image.png

6.6 解决方案:启用 configTIMER_QUEUE_LENGTH 等宏

#define configTIMER_QUEUE_LENGTH 1
#define configTIMER_TASK_STACK_DEPTH 1

image.png

6.7 错误 4:vApplicationGetTimerTaskMemory 未定义

image.png

6.8 解决方案:添加 vApplicationGetTimerTaskMemory 函数实现

该函数来给(静态)定时器任务的任务堆 栈及任务控制块分配内存:
image.png

7. 编译通过,烧写并验证

编译通过后,将代码烧写至设备进行验证。如果未能正常运行,请检测定时器创建时的定时周期设定,正常运行效果如下:
image.png

13. 定时器数量及消息队列关系

定时器数量的增加会增加定时器消息队列的长度。确保消息队列的长度设置合理。
image.png

14. 定时器优先级设置

如果定时器任务未能正常运行,可能是因为定时器任务的优先级设置过低,导致其被系统其他任务饿死。这时可以提高定时器任务的优先级:

#define configTIMER_TASK_PRIORITY (configMAX_PRIORITTERS-1)

image.png


根据实际定时器回调函数的使用情况设置定时器任务堆栈深度。示例中仅输出调试信息,堆栈深度设置为1可以正常运行。如果回调函数复杂,可以适当增加堆栈深度:

#define configTIMER_TASK_STACK_DEPTH 100

通过本教程,您应掌握了如何在 FreeRTOS 中创建和使用动态及静态定时器,以及配置相关的宏定义以确保定时器正常运行。合理配置和使用定时器,可以帮助提升系统的实时性和性能。 希望本文能帮助您更好地理解和应用 FreeRTOS 定时器。如果有任何疑问或需要进一步的指导,请在评论区留言,我们将尽快回复。

对应的 demo 源码, 请点击 RtosExPro at freertos_timer

也可扫码关注博主同名公众号"不解之榬",回复 “freeRTOS” 获取
不解之榬

  • 23
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值