嵌入式面试——FreeRTOS篇(七) 软件定时器

news2024/12/31 5:18:41

本篇为:FreeRTOS 软件定时器篇

一、软件定时器的简介

1、定时器介绍

答:

定时器:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可以自定义定时器周期。

硬件定时器:芯片本身自带的定时器模块,硬件定时器的精度一般很高,每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。

软件定时器:是指具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息。

2、软件定时器优缺点

答:

优点

  • 硬件定时器数量有限,而软件定时器理论上只需有足够内存,就可以创建多个;
  • 使用简单、成本低。

缺点

  • 软件定时器相对硬件定时器来说,精度没有那么高(因为它以系统时钟为基准,系统时钟中断优先级又是最低,容易被打断)。对于需要高精度要求的场合,不建议使用软件定时器。

3、FreeRTOS软件定时器特点

答:

  1. 可裁剪:软件定时器是可裁剪可配置的功能,如果要使能软件定时器,需将configUSE_TIMERS 配置项配置成 1 。
  2. 单次和周期:软件定时器支持设置成 单次定时器 或 周期定时器 。

注意:软件定时器的超时回调函数是由软件定时器服务任务调用的,软件定时器的超时回调函数本身不是任务,因此不能在该回调函数中使用可能会导致任务阻塞的 API 函数。

        软件定时器服务任务:在调用函数 vTaskStartScheduler()开启任务调度器的时候,会创建一个用于管理软件定时器的任务,这个任务就叫做软件定时器服务任务

4、软件定时器服务任务作用

答:

  1. 负责软件定时器超时的逻辑判断。
  2. 调用超时软件定时器的超时回调函数。
  3. 处理软件定时器命令队列。

5、软件定时器的命令队列

答:

        FreeRTOS 提供了许多软件定时器相关的 API 函数,这些 API 函数大多都是往定时器的队列中写入消息(发送命令),这个队列叫做软件定时器命令队列,是提供给 FreeRTOS 中的软件定时器使用的,用户是不能直接访问的。

6、软件定时器的相关配置

答:

  • 当FreeRTOS 的配置项 configUSE_TIMERS 设置为1,在启动任务调度器时,会自动创建软件定时器的服务/守护任务prvTimerTask( )。
  • 软件定时器服务任务的优先级为 configTIMERTASKPRIORITY = 31。
  • 定时器的命令队列长度为 configTIMERQUEUELENGTH = 5。

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

因此定时器的回调函数不要影响其他“人”:

  1. 回调函数要尽快实行,不能进入阻塞状态,即不能调用那些会阻塞任务的 API 函数,如:vTaskDelay() 。
  2. 访问队列或者信号量的非零阻塞时间的 API 函数也不能调用。

二、软件定时器的状态

1、软件定时器的状态

答:

  • 休眠态:软件定时器可以通过其句柄被引用,但因为没有运行,所以其定时超时回调函数不会被执行。
  • 运行态:运行态的定时器,当指定时间到达之后,它的超时回调函数会被调用。

注意:新创建的软件定时器处于休眠状态 ,也就是未运行的!

2、如何让软件定时器从休眠态转变为运行态?

答:

        发送命令队列。

三、单次定时器和周期定时器

1、单次定时器和周期定时器介绍

答:

        FreeRTOS提供了两种软件定时器:

  • 单次定时器:单次定时器的一旦定时超时,只会执行一次其软件定时器超时回调函数,不会自动重新开启定时,不过可以被手动重新开启。
  • 周期定时器:周期定时器的一旦启动以后就会在执行完回调函数以后自动的重新启动 ,从而周期地执行其软件定时器回调函数。

2、单次定时器和周期定时器的对比示例

答:

Timer1:周期定时器,定时超时时间为 2 个单位时间,开启后,一直以2个时间单位间隔重复执行。

Timer2:单次定时器,定时超时时间为 1 个单位时间,开启后,则在第一个超时后就不在执行了。

3、软件定时器的状态转换图

答:

        单次定时器状态转换图:

        周期定时器状态转换图:

四、软件定时器结构体成员介绍

1、软件定时器结构体介绍

答:

typedef   struct

{

       const char *                  pcTimerName              /* 软件定时器名字 */

       ListItem_t                    xTimerListItem           /* 软件定时器列表项 */

       TickType_t                    xTimerPeriodInTicks;     /* 软件定时器的周期 */

       void *                        pvTimerID                /* 软件定时器的ID */

       TimerCallbackFunction_t       pxCallbackFunction;      /* 软件定时器的回调函数 */

       #if ( configUSE_TRACE_FACILITY == 1 )

              UBaseType_t           uxTimerNumber            /*  软件定时器的编号,调试用  */

       #endif

       uint8_t                        ucStatus;               /*  软件定时器的状态  */

} xTIMER;

五、软件定时器相关API函数

1、软件定时器相关函数

答:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python项目实战-xPath下载人生格言

事先声明一下,仅分享爬虫经验,不会对网站有影响的,也请想要实操的小伙伴不要对网站频繁访问,如有侵权请联系我删除文章 文章目录 代码展示步骤解析思路整理节点树xPath语法分析网页结构 实战思路获取源代码源代码转化成节点树提取…

新手必备!百度思维导图在内四款必备工具分享

作为一名资料员,每天都要处理大量的信息和数据,思维导图对我来说简直就是救星。它帮我理清思路,把复杂的信息条理化,让我能更高效地完成工作。今天,我就来跟大家分享一下我用过的几款思维导图工具:福昕思维…

java项目之基于保密信息学科平台系统源码(springboot+vue+mysql)

项目简介 基于保密信息学科平台系统实现了以下功能: 基于保密信息学科平台系统的主要使用者管理员有个人中心,用户管理,教师管理,学科概况管理,人才培养管理,学科动态管理,学科资源管理&#…

2本书让你轻松入门大模型!《大模型入门:技术原理与实战应用》+《自然语言处理:大模型理论与实践》

随着大模型技术的不断完善和普及,我们将进入一个由数据驱动、智能辅助的全新工作模式和生活模式。个人和企业将能够利用大模型来降本增效,并创造全新的用户体验。 人工智能是人类探索未来的重要领域之一,以GPT为代表的大模型应用一经推出在短…

信息系统与计算技术国际学术会议

第十二届信息系统与计算技术国际会议(ISCTech 2024)将于2024年11月8日-11月11日在中国西安盛大举行,由长沙理工大学主办,同济大学、西北工业大学联合协办。 会议聚焦信息系统与计算技术等相关研究领域,广泛邀请国内外…

JavaGuide(3)

一、项目背景与简介 JavaGuide由GitHub用户Snailclimb开发并维护,是一个全面而深入的Java学习资源库。它旨在为Java初学者和有经验的开发者提供一个系统的学习路径和丰富的资源,帮助他们系统地学习和巩固Java及相关技术知识。 二、项目内容与特点 Jav…

【HTML】defer 和 async 属性在 script 标签中分别有什么作用?

需要这两个属性的原因? 首先我们要知道的是,浏览器在解析 HTML 的过程中,遇到了 script 元素是不能继续构建 DOM 树的。 它会停止解析构建,首先去下载 js 代码,并且执行 js 的脚本;只有在等到 js 脚本执行…

try、catch、finally、return执行顺序超详解析与throw与throws区别

try、catch、finally、return执行顺序超详解析(针对面试题) 有关try、catch、finally和return执行顺序的题目在面试题中可谓是频频出现。总结一下此类问题几种情况。 写在前面 不管try中是否出现异常,finally块中的代码都会执行&#xff1b…

IPguard与Ping32敏感内容防护能力对比,两款知名防泄密软件对比

在信息安全的新时代,企业面临着日益严重的敏感内容泄露风险。为了保障数据安全,选择合适的防护工具至关重要。IPguard与Ping32作为市场上两款知名的终端管理解决方案,各自具备独特的敏感内容防护能力。本文将对这两者进行深入对比&#xff0c…

kubeadm 搭建k8s 1.28.2版本集群

kubeadm 搭建k8s 1.28.2版本集群 1、kubuadm介绍: kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署: 创建一个Master 节点kubeadm init将Node 节点加入到当前集群中…

minio集群部署

最近接触到minio, 将本地集群部署,分别在ubuntu、centos stream9上进行了搭建,目前看里面的小坑不小,记录以下教程,以备忘、以供他人借鉴。 #### 准备 1、因新版本的minio要求,集群部署必须使用挂载非 roo…

Java基础:字符串详解

1 深入解读String类源码 1.1 String类的声明 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence { }String类是final的&#xff0c;意味着它不能被子类继承&#xff1b;String 类实现了Serializable接口&#xff0c;意味着…

没人告诉你的职场人情世故

看到前同事在群里分享的新年开工遭遇&#xff0c;真是让人感同身受。 第一天就遇到挫折&#xff0c;因为工作做得太快、太早交付&#xff0c;结果反被领导批评&#xff0c;还得重做&#xff0c;头大如斗。这不就提醒我们得时时刻刻记着职场里的那些不成文的规矩吗&#xff1f;…

Hunuan-DiT代码阅读

一 整体架构 该模型是以SD为基础的文生图模型&#xff0c;具体扩散模型原理参考https://zhouyifan.net/2023/07/07/20230330-diffusion-model/&#xff0c;代码地址https://github.com/Tencent/HunyuanDiT&#xff0c;这里介绍 Full-parameter Training 二 输入数据处理 这里…

一、Spring入门

文章目录 1. 课程内容介绍2. Spring5 框架概述3. Spring5 入门案例 1. 课程内容介绍 2. Spring5 框架概述 3. Spring5 入门案例

Java反射专题

目录 一.反射机制 1.Java Reflection 2.反射相关的主要类 3.反射的优缺点 4.反射调用优化—关闭访问检查 二.Class类 1.基本介绍 2.常用方法 3.获取Class对象的方式 4.那些类型有Class对象 三.类加载 1.介绍 2.类加载时机 3.类加载各阶段 四.获取类结构的信息 1…

25.第二阶段x86游戏实战2-背包属性补充

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

机器学习项目——运用机器学习洞察青年消费趋势

1. 项目背景 在21世纪的第三个十年&#xff0c;全球经济和技术的飞速发展正深刻影响着各个领域&#xff0c;尤其是青年消费市场。随着数字化进程的加速&#xff0c;尤其是移动互联网的广泛普及&#xff0c;青年的消费行为和生活方式发生了前所未有的转变。 然而&#xff0c;面对…

开源版GPT-4o来了!互腾讯引领风潮,开源VITA多模态大模型,开启自然人机交互新纪元[文末领福利]

目录 总览 VITA 模型的详细介绍 2.1 LLM 指令微调 2.2 多模态对齐 2.2.1 视觉模态 2.3 音频模态 多模态指令微调 3.1 训练数据 3.1.1 训练过程 模型部署&#xff1a;双工策略 4.1 非唤醒交互 4.2 音频中断交互 评估 5.1 语言表现 5.2 音频表现 5.3 多模态表现 …

离散微分几何中的网格(Meshes)

https://zhuanlan.zhihu.com/p/893338073 一、引言 ![](https://img-blog.csdnimg.cn/img_convert/c5e06e652822e0003cf6be91d26436b7.png) 在离散微分几何的广袤领域中&#xff0c;网格&#xff08;Meshes&#xff09;作为一个核心概念&#xff0c;犹如一座桥梁&#xff0c;…