FreeRTOS软件定时器

2023-11-11

目录

说明:

一、定时器简介

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 ,含义:发送命令到软件定时器命令队列的最大等待时间

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS软件定时器 的相关文章

  • (port is already in use)端口被占用问题

    前言 端口占用问题几乎每个开发人员都会遇到 每次用每次查 下面来记录下解决过程 以便日后需要 正文 1 调出命令窗口 windows R 组合键 调出命令窗口 2 查找占用端口对应的PID 进程号 说明 以下举例用到的端口和进程等仅做参考
  • Cadence Allegro PCB快捷键设置

    1 通过env文件设置快捷键 在安装路径下D Cadence SPB 16 6 share pcb text中找到env文件 利用记事本打开 就可以加入自己的快捷键方式了 二 env文件在哪里 以我的电脑为例 在安装路径下D cadence
  • 实现点击图片放大查看功能

    1 html 代码 div style display none text align center width 100 height 100 background color none img style height 1 width 4

随机推荐

  • unity物体自身轴旋转_unity3d如何实现物体自动旋转-unity3d物体自动旋转的设置教程 - 河东软件园...

    unity3d是我们设计师用来制作游戏画面的软件 很多的手机App也可以使用它来制作 有的时候我们在游戏中能够看见一些人物或是物体的移动效果 例如平移 旋转等等都可以轻松的利用这款软件来实现 今天小编想和大家分享一下如何在unity3d中使
  • 2020-08-13

    https www cnblogs com daizhengyang p 13384169 html https blog csdn net qq 27289001 article details 77150598 https www cn
  • oracle学习之rownum和rowid

    rownum先百度一波https www cnblogs com xfeiyun p 16355165 html rownum是oracle特有的一个关键字 对于基表 在insert记录时 oracle就按照insert的顺序 将rownu
  • 编程的未来

    从 ChatGPT 诞生至今 在程序员的圈子里 我们一直有两种讨论 最开始所恐慌的 编程没有未来 ChatGPT 是不是要取代程序员 编程的方式前所未有地发生了变化 现如今 GitHub Copilot Chat 可以让开发者们直接在编辑器
  • 使用python分析数据分布

    要使用 Python 分析数据分布 你可以使用 Python 中的数据可视化库 如 matplotlib 或 seaborn 例如 你可以使用 matplotlib 的 hist 函数绘制数据的直方图 以查看数据的分布情况 你也可以使用 s
  • redis-cli报错Could not connect to Redis at 127.0.0.1:6379: Connection refused

    新手安装完redis后想要使用redis cli连接但是报错 为什么会报这个错呢 首先启动redis server 看能否启动 启动命令式 redis server 然后 1如果修改了IP地址 比如说改成了192 168 66 66 那么执
  • 中移物联ML302 4G Cat1 模组TCP/UDP 实现流程

    中移物联ML302 4G Cat1 模组TCP UDP 实现流程 注意 下文种的 表示 r n 一 首先AT 00 57 34 794 发 AT 00 57 35 756 发 AT 00 57 35 760 收 AT OK 二 查询卡CIM
  • 并发策略之分工原则

    本文主要思想来自 Java虚拟机并发编程 薛笛 译 为什么要用并发 并发是再在有限的资源下提高性能的有效手段 当然现在互联网环境下并发访问的现象也比比皆是 但是本文并不涉及处理并发访问 而是使用并发手段解决复杂任务的策略 另外关于并发和并行
  • 算法——排序——归并排序图解动画

    归并排序 简介 代码示例 排序过程 分解 合并 时间复杂度 空间复杂度 稳定性 简介 归并排序分为两部分 分解 合并 分解 归并算法会把数组分成两个长度相同的子数组 直到无法再分割 每个数组只有一个元素 此过程不消耗时间资源 对应的时间复杂
  • 03 Java_数据类型&变量&运算符

    第二章 数据类型 变量和运算符 double string character integer scanner score name boolean true false Java常用的数据类型 Java语言提供了八种基本类型 六种数字类型
  • activemq的clientId

    这个id如果不设置的话 那么会以电脑主机以及毫秒值加上随机数值来确认 比如 DESKTOP ST4H4BI 61938 1593840777757 0 1 但是也可以设置 但是要注意 activemq不允许多个客户的地址相同且clientI
  • python与数据挖掘 上机实验_python数据挖掘实验报告1

    python数据挖掘实验报告1 python数据挖掘实验报告1 实验内容及步骤 包含简要的实验步骤流程 1 使用Pandas datareader获取任意两支股票近三个月的交易数据 做出收盘价的变动图像 2 使用Pandas datarea
  • 【Paddle NLP入门打卡】实践课1:词向量应用演示 学习笔记

    文章目录 1 下载配置Embedding 2 认识Embedding 3 将词向量映射到低维空间 4 基于TokenEmbedding的词袋模型 5 构造Tokenizer 5 2 查看相似语句相关度 6 使用可视化VisualDL查看句子
  • Java垃圾回收机制、性能优化

    前言 Android开发中经常会遇见应用内存不断增加 或者在处理不当的情况下 造成内存泄漏 严重会导致OOM 但是Java有自动垃圾回收机制 为什么还会造成这种情况呢 那我们通过new关键字创建出来的对象 开启的Activity在什么情况下
  • C++解析字符串获取参数

    文章目录 1 功能说明 2 代码 1 功能说明 一些软件在运行时 需要一些命令 这里使用通过字符串的方式 来获取软件启动需要的一些参数 比如 name1 aaa name2 bbb 有这样一个字符串 通过解析 name1对应的aaa nam
  • 【高危】Google Chrome V8 类型混淆漏洞(CVE-2023-2033)

    漏洞描述 Google Chrome V8是Google开源的JavaScript和WebAssembly引擎 被用在Chrome和Node js等浏览器和平台中 该项目受影响版本存在类型混淆漏洞 攻击者可通过诱导用户打开恶意链接来触发此漏
  • 结构化分析

    1 什么是结构化分析 结构化分析 Structured Analysis 简称SA 简单来说就是是软件工程中的一种面向数据流的需求分析的方法 它的本质是一种创建模型的活动 2 结构化分析的具体步骤有哪些 1 建立当前系统的 具体模型 系统的
  • C++ algorithm 头文件下的常用函数详解

    6 9 algorithm 头文件下的常用函数 使用algorithm头文件 6 9 1 max min 和abs max x y 和min x y 分别返回x和y中的最大值和最小值 abs x 返回x的绝对值 注意浮点型的绝对值请用mat
  • java程序配置dns后超时_Android笔记之解决OkHttp解析dns超时时间无法设置的问题

    问题 使用OkHttp 设备切换路由后 访问网络出现长时间无响应 很久以后才抛出UnknownHostException 这明显不是我们想要的 我们设置的connectTimeout属性似乎对dns的解析不起作用 如何解决 我们先看看OkH
  • FreeRTOS软件定时器

    目录 说明 一 定时器简介 1 1 定时器 1 2 软件定时器 1 3 硬件定时器 1 4 FreeRTOS软件定时器 1 5 软件定时器服务任务作用 1 6 软件定时器的命令队列 1 7 软件定时器相关配置 1 8 单次定时器和周期定时器