如何实现嵌入式软件定时/超时机制?

李肖遥 2024-05-30 22:11
    关注、星标公众号,直达精彩内容

链接:https://blog.csdn.net/qq_38767222/、https://blog.csdn.net/wyq200704/


中给出了两种软件定时机制的设计方案,其目标在于,让各位嵌入式软件工程师摒弃CPU阻塞等待延时的方式,使用硬件定时器作为时基,在其上面实现软件定时器及时间到达后的回调函数。

这是两种十分常用且实用的软件定时方式,对良好的程序架构设计具有很好的借鉴作用。
以下是原文。

软件超时机制

1、背景

在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的程序设计方案。

2、方案一

基本思想:定时器中断使用一个变量TICK,中断间隔时间t,在准备定时开始时读取此时刻的TICK,在程序运行过程中实时读取当前的TICK信息并计算即可。
因此在时间计算时只需计算开始STARTTICK和结束ENDTICK即可完成时间计算。时间计算T=(ENDTICK-STARTTICK)*t;使用一个定时器中断每t时间处理一次中断,中断里面时间计数值s_u32TCNT++,如下图所示:

程序中定义一个结构体来保存超时开始和超时结束时间,结构体定义如下图所示:

在需要做定时超时处理的地方实时的获取当前s_u32TCNT并赋值给u32EndTimeTick,计算开始u32StartTimeTick和结束时u32EndTimeTick的时间差来判断时间是否到来即可,程序设计示意代码如下图所示:

3、方案二

基本思想:定义回调函数和回调注册函数,将定时/超时服务函数注册回调,每一次定时器中断执行一次回调,回调函数只需对计时时间TCNT做减1操作即可。
当TCNT为0时即定时/超时时间到,并置超时标志,应用程序只需判断标志即可明确定时/超时时间是否到来;回调函数和回调注册函数定义如下图所示,多个超时/定时回调函数可注册在回调函数数组中:


定时中断函数中进行遍历处理,定时中断函数处理示意代码如下图所示:

4、对比总结

方案一优点在于中断执行单元执行内容少,代码操作容易理解,缺点是应用中实时的进行计算开始和结束TICK差值,代码执行效率不高。
方案二优点在于将超时函数注册在回调中即可,程序扩展性较好,不用做过多的数值计算,代码执行效率相对较高,缺点是定时中断中需要遍历所有已注册的对调,中断执行内容相对较多。

STM32程序超时设计

在程序设计中,出现以下类似语句,是非常不可靠的,很有必要加入超时处理!
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
以下在stm32的system_stm32f10x.c文件中,判断外部晶振起振的程序。可以参考,在以后的程序中借鉴。
#define HSE_STARTUP_TIMEOUT   ((uint16_t)0x0500) /*!< Time out for HSE start up */
/* Wait till HSE is ready and if Time out is reached exit */
do
{
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
I2C 读写EEPROM添加超时:
uint16_t i = 0x0fff;
while ((!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))&&i){i--;};



版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

关注我的微信公众号,回复“星球”加入知识星球,有问必答。



点击“阅读原文”查看知识星球详情,欢迎点分享、收藏、点赞、在看。

李肖遥 公众号“技术让梦想更伟大”,作者:李肖遥,专注嵌入式,只推荐适合你的博文,干货,技术心得,与君共勉。
评论 (0)
  • GPIO的功率、电压和电流取决于具体的GPIO类型和配置。 GPIO(General Purpose Input/Output)通用型输入输出端口,是一种多功能的电子接口,广泛应用于微控制器、微处理器以及各种电子设备中,用于读取或输出信号。理解GPIO的功率、电压和电流的相关特性是进行电子电路设计和编程的基础。这些参数决定了GPIO端口能安全处理的电量,以及它与其他电子组件交互时的兼容性。 从电压角度来看,GPIO端口通常设计有一定的耐压限度,这意味着它们可以安全地在特定的电压范围内工作。例
    丙丁先生 2024-06-21 17:43 78浏览
  •  经过近几年的618大促之后,如今的618已经被默认的低价竞争给包围了。随着低价竞争的持续蔓延,曾经积极参与其中的一些品牌商,态度也从积极转为消极;各种被“忽悠”的消费者,也在想着法逃离电商平台设置的套路。与此同时,不甘心被大主播绑架的电商平台,与胃口不断加大的头部主播,开始展开极限拉扯。以往热闹的618,如今变成了各路参与者的围城,渴望进去的不停向里面张望,渴望出来的则变着法地希望,跳出618这个牢笼。虚假繁荣背后的暗流涌动在直播电商红利之下,抖音、淘宝、京东、唯品会等各路平台,在直
    刘旷 2024-06-21 09:58 98浏览
  • TT电机(直流电机)的功率、电压、电流、瞬间启动电压和电流是其运行的关键参数。这些参数决定了电机的性能和适用场景**。在探讨TT电机的这些特性时,需要综合考虑其电气特性以及启动和运行条件。以下将逐一解析这些关键参数: 1. 功率:    - TT电机的功率通常取决于其设计和应用场景。例如,普通TT电机的额定功率可以在几瓦到几十瓦不等[^4^]。    - 对于不同的TT电机型号,如370电机和310电机,它们的功率输出也会有所不同。例如,370电机通常适
    丙丁先生 2024-06-21 17:18 66浏览
  • 站上风口,交付量狂飙,装机量翻番……是什么让LiDAR再次“翻红”? 一波三折。如果要用一个词形容近两年的激光雷达市场,恐怕它最为合适。人类纪元,2022年。开启量产元年的车载激光雷达,一度风光无限。当时OEM厂商对激光雷达关键指标提升的需求仿佛“军备竞赛”。加速批量上车,进一步控制成本,将其控制在500美元左右……那一年,产业链上下游众志成城,万众一心。转眼到了2023年,车企在面向ADAS和自动驾驶的感知技术上逐渐分化成两派,纯视觉路线的落地以及价格战带来的降本压力,让很多车企出现
    艾迈斯欧司朗 2024-06-21 17:10 70浏览
  • 1. 版权保护芯片RJGT102介绍为了防止硬件电路与固件被抄袭,核心在于加密芯片和安全解决方案的设计,目前大多MPU并不具备安全防护功能,所以最好的办法是使用一颗专用的加密芯片,通过加密芯片对接MPU,进行认证,授权,保存关键数据等。RJGT102采用了SHA256对称加密算法,256位的大数加密, 加密算法强度高。每片RJGT102都有唯一的客户编码,非常适合做防抄板,防抄软件,管控工厂生产数量,防止方案外泄等。参与SHA256运算的数据为:8字节Key(可动态更换),8
    万象奥科 2024-06-20 17:37 64浏览
  • 随着科技的进步不断更迭,电子设备的传输速度越来越快,时至今日对于高速传输带宽的要求也愈来愈高。印刷电路板(PCB,以下简称PCB) 在高速传输接口中扮演不可或缺的角色,其高频特性直接影响了整体传输效能。高频特性是指PCB在高频率下的电气性能,包括阻抗、插入损耗、回波损耗、群延迟等。这些参数会影响信号的传输速度、完整性和可靠性。 PCB潜在风险 你知道吗?如果PCB的高频特性不佳时,可能会导致以下问题: 信号传输速度变慢信号衰减增加信号反射增加信号失真 这些问题都会影响电子设备的性能,甚至
    百佳泰测试实验室 2024-06-20 16:05 114浏览
  • ​Raspberry Pi 已在伦敦证券交易所上市,股票代码为 Raspberry Pi Holdings plc。这是 Raspberry Pi 的分水岭,也是发展新阶段的开始:进入公开市场将使树莓派能够更快地制造出更多我们喜爱的产品。Raspberry Pi 基金会在首次公开募股中筹得的资金将支持其在第二个十年中影响全球的雄心壮志;有关首次公开募股对基金会意味着什么的更多信息,请点击这里查看菲利普的博文。博文地址:https://www.raspberrypi.org/blog/what-w
    树莓派开发者 2024-06-20 15:15 85浏览
  • 电脑显示器已逐渐成为现代人时常会接触到的3C产品,能带给消费者愉快的视听娱乐,不管是看电影、追剧、听音乐放松心情,或是玩一场紧张刺激的电竞游戏。忙碌之余,能够偶尔享受闲暇时光,也是一种释放。 您是否也曾遇过,在享受电影或游戏的过程当中,显示器带给我们的影像和声音突然出现不协调的情况呢?这就像是两者间没有互相搭配好,节奏步调变得不一样!这种情况我们称为「影音延迟」或「影音不同步」。 当这类问题持续发生时,无法好好享受电影或者追剧,会让人心情烦躁。对于电竞玩家来说更是硬伤,除了分心、受干扰外,更
    百佳泰测试实验室 2024-06-20 15:55 105浏览
  • Matter是连接标准联盟(CSA)所推出的统一连接标准,旨在让不同品牌的智能装置可以互通互联。并且支持包含Wi-Fi、Ethernet、Thread和Bluetooth等多种连接协议。 随着Matter被广泛运用于智能家居生态圈,目前Apple Homekit、Amazon Alexa、Google Home和Samsung SmartThings等智能语音助理都已支持Matter。然而,要是网络服务供货商的网络突然断线了,家里的智能装置是否还能正常操作?还是必需连接到外部网络才能控制智能装
    百佳泰测试实验室 2024-06-20 15:40 113浏览
  • ​在为期三天的上海国际嵌入式展会中,树莓派和上海晶珩一起展示了众多的基于树莓派和CODESYS的解决方案,没去过展会现场的小伙伴千万别错过这篇文章!视频地址:https://www.bilibili.com/video/BV1c1421k7ne/?vd_source=a637ced2b66f15709d16fcbaceeb47a9这个基于Raspberry Pi 5的嵌入式系统解决方案集成了16个EtherCAT总线控制的步进电机,旨在实现高性能的多轴运动控制。Raspberry Pi 5作为核
    树莓派开发者 2024-06-21 14:29 69浏览
  • 在汽车的复杂电路网络中,仪表网关扮演着信息枢纽的角色。对于驾校使用大众朗逸车主而言,了解仪表网关的位置不仅有助于日常维护,更是故障诊断和车辆升级的关键所在。大众朗逸作为一款深受消费者喜爱的车型,凭借其稳定的性能和经济的油耗赢得了广泛的市场认可。然而,即便是这样一款优秀的车型,在驾校使用过程中也难免会遇到一些技术问题,这时候对仪表网关的了解就显得尤为重要。18年后的大众,网关都是标配,直接从OBD通过CAN监听是没有数据报文对外发出的,不是没有,而是避开诊断请求,这个后边说。朗逸CAN总线技术的引
    lauguo2013 2024-06-21 08:18 74浏览
  • 反激电源包含原边反激何副边反激,原边反馈动态响应比副边反馈慢,但是相对成本低,无论是原边反馈还是副边反馈由于反激电源电路简单,成本低广泛的用在在电动两轮车Escooter,电动工具,打印机,清洁电器等充电场景,也广泛的应用在电表,家电,新能源等场景作为辅助电源给芯片供电,下面就以无锡明芯微的MX1210E作为例子详细的介绍下一款24v2.5A的一个方案,从该方案来看输入口有NTC防止过流,采用10D561K 的压敏作输入过压保护,有个滤波的0.47uF的X电容并采用分压电阻做X电容放电,串联差模
    王萌 2024-06-21 09:27 235浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦