【FreeRTOS】SoftwareTimer软件定时器

2024-08-25 00:20

本文主要是介绍【FreeRTOS】SoftwareTimer软件定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SoftwareTimer软件定时器

  • 软件定时器
    • 定时器服务/Daemon任务
    • 定时器相关配置FreeRTOSConfig.h
      • 1、configUSE_TIMERS
      • 2、configTIMER_TASK_PRIORITY
      • 3、configTIMER_QUEUE_LENGTH
      • 4、configTIMER_TASK_STACK_DEPTH
    • 单次定时器和周期定时器
    • 复位软件定时器API
    • 创建软件定时器API
    • 开启软件定时器API
    • 停止软件定时器API

软件定时器

与MCU自带的硬件定时器(比如STM32的高级、通用、基本定时器就属于硬件定时器)不同,FreeRTOS中的软件定时器通过软件实现,精度较低,适用于精度要求不高且需要周期性执行的任务。

软件定时器的回调函数是在中断服务函数中执行的,所以需要注意软件定时器回调函数中不能带有延时阻塞性的函数,比如vTaskDelay()、vTaskDelayUnti()等,以及其他非零阻塞时间的API函数也不能调用。

定时器服务/Daemon任务

定时器是一个可选的、不属于FreeRTOS内核的功能,由定时器服务(或Daemon)任务来提供的,FreeRTOS提供的与定时器相关的API函数,这些API函数大多数都使用FreeRTOS中的队列发送命令给定时器服务任务,而这个队列叫做定时器命令队列。定时器命令队列是提供给FreeRTOS的软件定时器使用的,用户不能直接访问,只能通过API函数来间接操作。

定时器相关配置FreeRTOSConfig.h

1、configUSE_TIMERS

如果要使用软件定时器的话宏configUSE_TIMERS一定要设置为1,当设置为1时定时器服务任务会在启动FreeRTOS调度器时自动创建。

2、configTIMER_TASK_PRIORITY

设置软件定时器服务任务的任务优先级,可以为0~(configMAX_PRIORITIES-1)。优先级一定要根据实际应用要求来设置,定时器服务任务的优先级设置越高,定时器命令队列中的命令和定时器回调函数会更快得到响应和处理。

3、configTIMER_QUEUE_LENGTH

此宏用来设置定时器命令队列的队列长度

4、configTIMER_TASK_STACK_DEPTH

此宏用来设置定时器服务任务的任务堆栈大小,单位为字(对于STM32来说,1字=4字节),由于定时器服务任务中会执行定时器的回调函数,因此任务堆栈大小一定要根据定时器的回调函数来设置。

单次定时器和周期定时器

软件定时器分两种:单次定时器和周期定时器,单次即设置定时1s,时间到后会执行一次回调函数,然后停止,直到重新手动启动;周期即设置定时1s,时间到后会执行一次回调函数,然后重新开始计时1s,时间到后重新执行,依次重复。

复位软件定时器API

复位软件定时器,即重新计算定时器周期到达的时间点,这个新的时间点是相对于复位定时器的那个时刻计算的,并不是第一次启动软件定时器的时间点。例如计时10s的周期性任务,在第9秒时复位了软件定时器,则该任务需要重新等待10s才会执行。

函数描述
BaseType_t xTimerReset(TimerHandle_t xTimer,TickType_t xTicksToWait)任务级复位软件定时器函数
BaseType_t xTimerResetFromISR(TimerHandle_t xTimer,BaseType_t *pxHigherPriorityTaskWoken)中断级复位软件定时器函数

创建软件定时器API

函数描述
TimerHandle_t xTimerCreate(…)动态创建软件定时器函数
TimerHandle_t xTimerCreateStatic(…)静态态创建软件定时器函数
TimerHandle_t xTimerCreate( const char * const pcTimerName,TickType_t xTimerPeriodInTicks,UBaseType_t uxAutoReload,void * pvTimerID,TimerCallbackFunction_t pxCallbackFunction )
TimerHandle_t xTimerCreateStatic(const char * const pcTimerName,TickType_t xTimerPeriodInTicks,UBaseType_t uxAutoReload,void * pvTimerID,TimerCallbackFunction_t pxCallbackFunction,StaticTimer_t * pxTimerBuffer )
参数名描述
pcTimerName软件定时器名字,字符串类型
xTimerPeriodInTicks定时器周期,单位是时钟节拍数。例如configTICK_RATE_HZ为1000,说明1ms的时钟节拍为1,则定时1s可以设置为1000
uxAutoReload设置定时器模式为单次or周期,为pdTRUE时为周期,pdFALSE为单次
pvTimerID定时器ID号,FreeRTOS中支持多个定时器共同调用一个回调函数,在回调函数中可以通过ID号区分不同定时器
pvCallbackFunction定时器回调函数,传入函数名(即函数指针)即可
pxTimerBuffer(静态创建)参数指向一个StaticTimer_t类型的变量,用来保存定时器结构体

两个函数创建成功后都会返回软件定时器控制句柄,失败则返回NULL。

开启软件定时器API

函数描述
BaseType_t xTimerStart(TimerHandle_t xTimer,TickType_t xTicksToWait)任务级开启软件定时器函数
BaseType_t xTimerStartFromISR(TimerHandle_t xTimer,BaseType_t * pxHigherPriorityTaskWoken)中断级开启软件定时器函数

停止软件定时器API

函数描述
BaseType_t xTimerStop(TimerHandle_t xTimer,TickType_t xTicksToWait)任务级停止软件定时器函数
BaseType_t xTimerStopFromISR(TimerHandle_t xTimer,BaseType_t * pxHigherPriorityTaskWoken)中断级停止软件定时器函数

这篇关于【FreeRTOS】SoftwareTimer软件定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104024

相关文章

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头,视频到处都是,就跟天上的星星一样数不清。不管你是公司里的新面孔,还是职场上的老狐狸,学会怎么剪视频,就好比找到了赢的秘诀。不管是给上司汇报工作,展示你的产品,还是自己搞点小视频记录生活,只要是剪辑得漂亮,肯定能一下子吸引大家的目光,让人记得你。咱们今天就来侃侃现在超火的三款视频剪辑工具,尤其是PR剪辑,你肯定听说过,这货在剪辑界可是大名鼎鼎,用它剪视频,既专业又麻利。 NO1. 福昕轻松

秒变高手:玩转CentOS 7软件更换的方法大全

在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分

FreeRTOS学习笔记(六)队列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列的基本内容1.1 队列的引入1.2 FreeRTOS 队列的功能与作用1.3 队列的结构体1.4 队列的使用流程 二、相关API详解2.1 xQueueCreate2.2 xQueueSend2.3 xQueueReceive2.4 xQueueSendFromISR2.5 xQueueRecei