FreeRTOS软件定时器 | FreeRTOS十三
目录
说明:
一、定时器简介
1.1、定时器
1.2、软件定时器
1.3、硬件定时器
1.4、FreeRTOS软件定时器
1.5、软件定时器服务任务作用
1.6、软件定时器的命令队列
1.7、软件定时器相关配置
1.8、单次定时器和周期定时器
1.9、软件定时器结构体
二、软件定时器相关API函数
2.1、创建软件定时器函数
2.2、开启软件定时器函数
2.3、停止软件定时器函数
2.4、复位软件定时器函数
2.5、更改软件定时器超时时间函数
2.6、删除软件定时器函数
说明:
关于内容:
1)以下内容多为概念了解与步骤分析
2)暂无个人示例代码,使用的是FreeRTOS的官方示例代码
3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试
关于其它:
1)操作系统:win 10
2)平台:keil 5 mdk
3)语言:c语言
4)板子:STM32系列移植FreeRTOS
一、定时器简介
1.1、定时器
从指定是时刻开始,经过一个指定时间,然后触发一个超时事件,用户可以自定义定时器的周期。
1.2、软件定时器
是指具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称为超时函数),用户在回调函数中处理信息。
优点:
1)硬件定时器数量有限,而软件定时器理论上只需要有足够内存,就可以创建多个;
2)使用简单,成本低。
缺点:
1)软件定时器相对硬件定时器来说,精度没那么高(因为它以系统时钟为基准,系统时钟中断优先级又是最低,容易被打断)。对于需要高精度要求的场合,不建议使用软件定时器。
1.3、硬件定时器
芯片本身自带的定时器模块,硬件定时器的精度很高(比软件定时器高),每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。
1.4、FreeRTOS软件定时器
特点:
1)可裁剪,软件定时器是可裁剪可配置的功能,如果要使能软件定时器,需要将宏定义:configUSE_TIMERT配置项设置为1(不使用设置为0);
2)单次和周期,软件定时器支持设置成:单次定时器或周期定时器。
注意点:
1)软件定时器的超时回调函数是由软件定时器服务任务调用的,软件定时器的超时回调函数本身不是任务,因此不能在改回调函数中使用可能会导致任务阻塞的API函数;
2)软件定时器服务任务:在调用函数vTaskStartScheduler()开启任务调度器的时候,会创建一个管理软件定时器的任务,这个任务称为-->软件定时器服务任务。
1.5、软件定时器服务任务作用
1)负责软件定时器超时的逻辑判断;
2)调用超时软件定时器的超时回调函数;
3)处理软件定时器命令队列。
1.6、软件定时器的命令队列
FreeRTOS提供了许多软件定时器相关的API函数,这些API函数大多都是往定时器的队列中写入消息(本质上是发送命令),这个队列叫做软件定时器命令队列,是提供给FreeRTOS中的软件定时器使用的,用户不能直接访问。
例如:定义了一个任务,开启定时器(API函数往软件定时器命令队列写入消息,发送命令)-->软件定时器命令队列-->软件定时器任务读取软件定时器命令队列消息(接收命令)。
1.7、软件定时器相关配置
1)如果要使能软件定时器,需要将宏定义:configUSE_TIMERT配置项设置为1(不使用设置为0),在启动任务调度器时,会自动创建软件定时器的服务/守护任务prvTimerTask();
2)软件定时器服务任务的优先级为configTIMER_TASK_PRIORITY=31(最大任务优先级);
3)定时器的命令队列长度为configTIMER_QUEUE_LENGTH=5。
注意点:
1)软件定时器的超时回调函数是在软件定时器服务任务中被调用的,服务任务不是专为某个定时器服务的,它还要处理其他定时器,所以定时器的回调函数-->不要影响其他定时器任务,即不能调用那些会阻塞任务的API函数,如:vTaskDelay();
2)访问队列或信号量的非零阻塞时间的API函数也不能调用。
软件定时器的状态:
1)休眠态:软件定时器可以通过其句柄被引用,但因为没有运行,所以其定时超时回调函数不会被执行;
2)运行态:运行态的定时器,当指定时间到达之后,它的超时回调函数会被调用。
注意:新创建的软件定时器处于休眠态,也就是未运行
那么如何让软件定时器从休眠态转变为运行态?
发送命令队列!
1.8、单次定时器和周期定时器
1)单次定时器:单次定时器一旦定时超时,之后执行一次其软件定时器超时回调函数,不会自动重新开启定时,不过可以被手动重新开启;
2)周期定时器:周期定时器的一旦启动以后就会在执行完回调函数以后自动的重新启动,从而周期地执行其软件定时器回调函数。
1.9、软件定时器结构体
结构体成员:
typedef struct tmrTimerControl
{
const char * pcTimerName;
ListItem_t xTimerListItem;
TickType_t xTimerPeriodInTicks;
void * pvTimerID;
TimerCallbackFunction_t pxCallbackFunction;
#if ( configUSE_TRACE_FACILITY == 1 )
UBaseType_t uxTimerNumber;
#endif
uint8_t ucStatus;
} xTIMER;
含义:
名称,pcTimerName,含义:软件定时器名字
名称,xTimerListItem,含义:然后定时器列表项
名称,xTimerPeriodInTicks,含义:软件定时器周期
名称,pvTimerID,含义:软件定时器ID-->区分不同定时器
名称,pxCallbackFunction,含义:软件定时器回调函数
名称,uxTimerNumber,含义:软件定时器编号,调试用
名称,ucStatus,含义:软件定时器的状态
二、软件定时器相关API函数
2.1、创建软件定时器函数
动态创建函数实现:
TimerHandle_t xTimerCreate( const char * const pcTimerName,
const TickType_t xTimerPeriodInTicks,
const UBaseType_t uxAutoReload,
void * const pvTimerID,
TimerCallbackFunction_t pxCallbackFunction );
参数含义:
名称,pcTimerName,含义:软件定时器名
名称,xTimerPeriodInTicks,含义:定时超时时间,单位是:系统时钟节拍
名称,uxAutoReload,含义:定时器模式,pdTRUE:周期定时器,pdFALSE:单次定时器
名称,pvTimerID,含义:软件定时器ID,用于多个软件定时器公用一个回调函数时区分
名称,pxCallbackFunction ,含义:软件定时器超时回调函数
返回值含义:
返回,NULL,含义:软件定时器创建失败
返回,其他值,含义:软件定时器创建成功,返回句柄
2.2、开启软件定时器函数
代码实现:
BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );
参数含义:
名称,xTimer,含义:待开启的软件定时器的句柄
名称,xTicksToWait ,含义:发送命令到软件定时器命令队列的最大等待时间
返回值含义:
返回,pdPASS,含义:软件定时器开启成功
返回,pdFAIL,含义:软件定时器开启失败
2.3、停止软件定时器函数
代码实现:
BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait );
参数含义:
名称,xTimer,含义:待停止的软件定时器的句柄
名称,xTicksToWait ,含义:发送命令到软件定时器命令队列的最大等待时间
返回值含义:
返回,pdPASS,含义:软件定时器停止成功
返回,pdFAIL,含义:软件定时器停止失败
2.4、复位软件定时器函数
代码实现:
BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
参数含义:
名称,xTimer,含义:待复位的软件定时器句柄
名称,xTicksToWait ,含义:发送命令到软件定时器命令队列的最大等待时间
返回值含义:
返回,pdPASS,含义:软件定时器复位成功
返回,pdFAIL,含义:软件定时器复位失败
说明:
该功能将使软件定时器的重新开启定时,复位后软件定时器重新从0个时间单位开始计数。
2.5、更改软件定时器超时时间函数
代码实现:
BaseType_t xTimerChangePeriod( TimerHandle_t xTimer,
TickType_t xNewPeriod,
TickType_t xTicksToWait );
参数含义:
名称,xTimer,含义:待更新的软件定时器句柄
名称,xNewPeriod,含义:新的定时超时时间,单位:系统时钟节拍
名称,xTicksToWait ,含义:发送命令到软件定时器命令队列的最大等待时间
返回值含义:
返回,pdPASS,含义:软件定时器定时超时时间修改成功
返回,pdFAIL,含义:软件定时器定时超时时间修改失败
2.6、删除软件定时器函数
代码实现:
BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait );
参数含义:
名称,xTimer,含义:待删除的软件定时器句柄
名称,xTicksToWait ,含义:发送命令到软件定时器命令队列的最大等待时间
相关文章:
FreeRTOS软件定时器 | FreeRTOS十三
目录 说明: 一、定时器简介 1.1、定时器 1.2、软件定时器 1.3、硬件定时器 1.4、FreeRTOS软件定时器 1.5、软件定时器服务任务作用 1.6、软件定时器的命令队列 1.7、软件定时器相关配置 1.8、单次定时器和周期定时器 1.9、软件定时器结构体 二、软件定时…...

电脑文件被误删?360文件恢复工具,免费的文件恢复软件
电脑里面保存着各种文件,因为误操作我们把还需要用的文件给删除了。很多人都想要使用不收费的文件恢复软件来进行恢复操作,但是又不清楚有哪些文件可以帮到我们。接下来就给大家介绍,一款真正免费的数据 恢复app,一起来看看&#…...
pg_cron优化案例--terminate pg_cron launcher可自动拉起
场景 在PostgreSQL中我们可以使用pg_cron来实现数据库定时任务 我有一个select 1的定时任务,每分钟触发一次 testdb# select * from cron.job ;jobid | schedule | command | nodename | nodeport | database | username | active | jobname -------…...

Python 之 NumPy 随机函数和常用函数
文章目录一、随机函数1. numpy.random.rand(d0,d1,…,dn)2. numpy.random.randn(d0,d1,…,dn)3. numpy.random.normal()4. numpy.random.randint()5. numpy.random.sample6. 随机种子np.random.seed()7. 正态分布 numpy.random.normal二、数组的其他函数1. numpy.resize()2. nu…...

【目标检测】K-means和K-means++计算anchors结果比较(附完整代码,全网最详细的手把手教程)
写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 一、介绍 YOLO系列目标检测算法中基于anchor的模型还是比较多的,例如YOLOv3、YOLOv4、YOLOv5等,我们可以随机初始化a…...

Java高手速成 | 图说重定向与转发
我们先回顾一下Servlet的工作原理,Servlet的工作原理跟小猪同学食堂就餐的过程很类似。小猪同学点了烤鸡腿(要奥尔良风味的),食堂窗口的服务员记下了菜单,想了想后厨的所有厨师,然后将菜单和餐盘交给专门制…...
Git:不小心在主分支master上进行修改,怎么才能将修改的数据保存到正确的分支中
1.如果还没有push commit 代码第一步:将所修改的代码提交到暂存区git stash第二步:切换到正确的分支git checkout 分支名第三步:从暂存区中取出保存到正确的分支中git stash pop第四步:重新提交git push origin 分支名2.如果已经p…...

都2023年了,如果不会Stream流、函数式编程?你确定能看懂公司代码?
👳我亲爱的各位大佬们好😘😘😘 ♨️本篇文章记录的为 Stream流、函数式编程 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉🙉。 ♨️如果…...

亚马逊云科技汽车行业解决方案
当今,随着万物智联、云计算等领域的高速发展,创新智能网联汽车和车路协同技术正在成为车企加速发展的关键途径,推动着汽车产品从出行代步工具向着“超级智能移动终端”快速转变。 挑战无处不在,如何抢先预判? 随着近…...

为什么学了模数电还是看不懂较复杂的电路图
看懂电路并不难。 (1) 首先要摆正心态,不要看到错综复杂的电路图就一脸懵逼,不知所错。你要明白,再复杂的电路也是由一个个的基本电路拼装出来的。 (2) 基础知识当然是少不了的,常用的基本电路结构搞搞清楚。 (3) 分析电路之前先要…...

帮公司面试了一个30岁培训班出来的程序员,没啥工作经验...
首先,我说一句:培训出来的,优秀学员大有人在,我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配,是非常遗憾的事情。 最近,在网上看到这样一个留言,引发了程序员这个圈子不少的…...

勒索软件、网络钓鱼、零信任和网络安全的新常态
当疫情来袭时,网络罪犯看到了他们的机会。随着公司办公、政府机构、学校和大学从以往的工作模式转向远程线上办公模式,甚至许多医疗保健设施都转向线上,这种快速的过渡性质导致了不可避免的网络安全漏洞。消费者宽带和个人设备破坏了企业安全…...
python3 字符串拼接与抽取
我们经常会有对字符串进行拼接和抽取的需求,下面有几个例子可以作为参考。 需求1:取出ip地址的网络地址与网络掩码进行拼接,分别使用shell脚本和python3实现 # echo "192.168.0.1"|awk -F. {print $1"."$2"."…...
Linux就该这么学:存储结构与管理硬盘
Linux系统中常见的目录名称以及相应内容 目录名称应放置文件的内容/boot开机所需文件—内核、开机菜单以及所需配置文件等/dev以文件形式存放任何设备与接口/etc配置文件/home用户主目录/bin存放单用户模式下还可以操作的命令/lib开机时用到的函数库,以及/bin与/sbin下面的命令…...
JSP四大作用域,九大内置对象
面试题:JSP和Servlet的区别?JSP的本质就是servleJSP更加侧重于视图的展示,servlet更注重逻辑的处理。面试题:include指令和jsp:include标签的区别?从效果上来说,没区别。include指令是把两个页面合成一个js…...

机器学习笔记之生成模型综述(五)重参数化技巧(随机反向传播)
机器学习笔记之生成模型综述——重参数化技巧[随机反向传播]引言回顾神经网络的执行过程变分推断——重参数化技巧重参数化技巧(随机反向传播)介绍示例描述——联合概率分布示例描述——条件概率分布总结引言 本节将系统介绍重参数化技巧。 回顾 神经网络的执行过程 上一节…...

1、创建第一个Android项目
1.1、创建Android工程项目:双击打开Android Studio。在菜单栏File中new-->new project3、在界面中选择Empty Activity,然后选择next4、在下面界面中修改工程名称,工程保存路径选择java语言,然后点击finishAndroid studio自动为…...

【python百炼成魔】手把手带你学会python数据类型
文章目录前言一. python的基本数据类型1.1 如何查看数据类型1.2 数值数据类型1.2.1 整数类型1.2.2 浮点数类型1.2.3 bool 布尔数值类型1.2.4 字符串类型二. 数据类型强制转换2.1 强制转换为字符串类型2.2 强制转换为int类型2.3 强制转换函数之float() 函数三. 拓展几个运算函数…...

数据储存以及大小端判断
目录 数据存储 1,二进制存储方式(补码,反码,源码) 2,指针类型 3,大端,小段判断 1,二进制存储方式(补码,反码,源码) 我…...
GRASP设计原则
GRASP设计原则介绍9种基本原则创建者 Creator问题解决方法何时不使用?好处信息专家 Information Expert问题解决方法信息怎么做优点低耦合 Low Coupling耦合问题解决方法原则何时不使用?控制器 Controller问题解决方法外观控制器会话控制器优点臃肿控制器的解决方法高内聚 Hi…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...