0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何设计STM32嵌入式程序的超时机制?

STM32嵌入式开发 来源:CSDN-share明 2023-06-15 17:04 次阅读

软件超时机制

1、背景

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

2、方案一

基本思想:定时器中断使用一个变量TICK,中断间隔时间t,在准备定时开始时读取此时刻的TICK,在程序运行过程中实时读取当前的TICK信息并计算即可。

因此在时间计算时只需计算开始STARTTICK和结束ENDTICK即可完成时间计算。时间计算T=(ENDTICK-STARTTICK) * t;使用一个定时器中断每t时间处理一次中断,中断里面时间计数值s_u32TCNT++,如下图所示: aa1d1a18-0b5b-11ee-962d-dac502259ad0.png

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

aa32c0b6-0b5b-11ee-962d-dac502259ad0.png

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

aa43c9e2-0b5b-11ee-962d-dac502259ad0.png

3、方案二

基本思想:定义回调函数和回调注册函数,将定时/超时服务函数注册回调,每一次定时器中断执行一次回调,回调函数只需对计时时间TCNT做减1操作即可。

当TCNT为0时即定时/超时时间到,并置超时标志,应用程序只需判断标志即可明确定时/超时时间是否到来;回调函数和回调注册函数定义如下图所示,多个超时/定时回调函数可注册在回调函数数组中: aa532fae-0b5b-11ee-962d-dac502259ad0.pngaa60b0de-0b5b-11ee-962d-dac502259ad0.png

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

aa709a8a-0b5b-11ee-962d-dac502259ad0.png

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--;};

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19014

    浏览量

    303150
  • STM32
    +关注

    关注

    2266

    文章

    10870

    浏览量

    354753
  • 中断
    +关注

    关注

    5

    文章

    895

    浏览量

    41386
  • 定时器
    +关注

    关注

    23

    文章

    3237

    浏览量

    114448
  • 程序
    +关注

    关注

    116

    文章

    3775

    浏览量

    80838

原文标题:如何设计STM32嵌入式程序的超时机制?

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式软件程序设计方案

    嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的
    发表于 09-06 09:27 1211次阅读
    <b class='flag-5'>嵌入式</b>软件<b class='flag-5'>程序</b>设计方案

    espconn_gethostbyname接口DNS解析超时机制要自己做吗?

    espconn_gethostbyname这个接口,DNS解析超时机制要自己做吗?,这个接口的回调函数是如何触发的,有没有超时触发机制
    发表于 07-12 12:29

    请问HAL库的超时机制可以修改吗?

    HAL库的超时机制,好像都是采用循环判断的方式(如下面代码中的红色部分),这对于低功耗控制和程序的时序控制太不利了,如果超时比较长,且该段代码在高优先级的任务中执行,则低优先级的任务在这段超时
    发表于 01-30 07:15

    Linux串口通信的超时机制

    在Linux下使用串口通信时,默认的阻塞模式是不实用的。而采用select或epoll机制的非阻塞模式,写代码有比较麻烦。幸好Linux的串口自己就带有超时机制
    发表于 07-05 08:38

    实现嵌入式软件超时的方法

    链接:https://blog.csdn.net/qq_38767222/、https://blog.csdn.net/wyq200704/软件超时机制1、背景在嵌入式软件程序设计过程中,...
    发表于 12-24 06:01

    嵌入式系统的超时控制及其应用

    预期事件的循环等待是嵌入式系统应用程序的基本结构之一,在等待程序中引入超时控制是提高应用程序容错性能的重要途径。给出
    发表于 05-14 13:50 16次下载

    一种基于嵌入式系统的远程程序更新机制

    提出了一种基于嵌入式系统的远程程序更新机制,通过一个具体的嵌入式远程数字监控系统设计方案,分析了该机制的系统结构、实现原理和实现流程,实际的
    发表于 08-26 11:47 16次下载

    STM32嵌入式系统设计的智能控制网络终端技术

    STM32嵌入式系统设计的智能控制网络终端技术 本文重点介绍基于STM32的智能嵌入式终端的网络控制功能的设计和实现。 智能网络终端是实现智能化管理的
    发表于 05-06 17:39 1635次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>嵌入式</b>系统设计的智能控制网络终端技术

    基于公平心跳超时容错机制

    故障误判损失模型,提出公平误判损失(FMJL)算法,使其同时满足长作业和短作业要求;接着,设计并实现了基于FMJL算法的公平超时机制。在实现了公平超时机制的Hadoop上运行大约345 s的短作业时,当出现TaskTracker节点故障时作业完成时间平均
    发表于 01-02 10:43 0次下载

    嵌入式Linux应用程序例程

    嵌入式Linux应用程序例程(arm嵌入式开发步骤)-嵌入式Linux应用程序例程,有需要的可以参考!
    发表于 07-30 13:23 16次下载
    <b class='flag-5'>嵌入式</b>Linux应用<b class='flag-5'>程序</b>例程

    嵌入式详解

    嵌入式详解(stm32嵌入式开发实例)-嵌入式详解,有需要的可以参考!
    发表于 07-30 16:07 64次下载
    <b class='flag-5'>嵌入式</b>详解

    嵌入式软件定时/超时机制程序设计

    一、背景在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或
    发表于 11-03 18:36 10次下载
    <b class='flag-5'>嵌入式</b>软件定时/<b class='flag-5'>超时机制程序</b>设计

    介绍两种嵌入式软件超时(或定时)的程序设计方案

    嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的
    的头像 发表于 05-20 10:28 959次阅读
    介绍两种<b class='flag-5'>嵌入式</b>软件<b class='flag-5'>超时</b>(或定时)的<b class='flag-5'>程序</b>设计方案

    STM32程序超时设计

    软件超时机制 1、背景 在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面
    的头像 发表于 06-22 10:52 1119次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>程序</b><b class='flag-5'>超时</b>设计

    嵌入式软件中两种超时程序设计方案

    1、背景 在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时
    的头像 发表于 10-27 15:15 643次阅读
    <b class='flag-5'>嵌入式</b>软件中两种<b class='flag-5'>超时</b><b class='flag-5'>程序</b>设计方案