精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何設(shè)計(jì)STM32嵌入式程序的超時(shí)機(jī)制?

STM32嵌入式開發(fā) ? 來源:CSDN-share明 ? 2023-06-15 17:04 ? 次閱讀

軟件超時(shí)機(jī)制

1、背景

嵌入式軟件程序設(shè)計(jì)過程中中,經(jīng)常會(huì)遇到超時(shí)(或定時(shí))的處理情況,基本處理思想是在時(shí)間到的時(shí)候進(jìn)行相關(guān)程序處理,下面介紹兩種超時(shí)(或定時(shí))的程序設(shè)計(jì)方案。

2、方案一

基本思想:定時(shí)器中斷使用一個(gè)變量TICK,中斷間隔時(shí)間t,在準(zhǔn)備定時(shí)開始時(shí)讀取此時(shí)刻的TICK,在程序運(yùn)行過程中實(shí)時(shí)讀取當(dāng)前的TICK信息并計(jì)算即可。

因此在時(shí)間計(jì)算時(shí)只需計(jì)算開始STARTTICK和結(jié)束ENDTICK即可完成時(shí)間計(jì)算。時(shí)間計(jì)算T=(ENDTICK-STARTTICK) * t;使用一個(gè)定時(shí)器中斷每t時(shí)間處理一次中斷,中斷里面時(shí)間計(jì)數(shù)值s_u32TCNT++,如下圖所示: aa1d1a18-0b5b-11ee-962d-dac502259ad0.png

程序中定義一個(gè)結(jié)構(gòu)體來保存超時(shí)開始和超時(shí)結(jié)束時(shí)間,結(jié)構(gòu)體定義如下圖所示:

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

在需要做定時(shí)超時(shí)處理的地方實(shí)時(shí)的獲取當(dāng)前s_u32TCNT并賦值給u32EndTimeTick,計(jì)算開始u32StartTimeTick和結(jié)束時(shí)u32EndTimeTick的時(shí)間差來判斷時(shí)間是否到來即可,程序設(shè)計(jì)示意代碼如下圖所示:

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

3、方案二

基本思想:定義回調(diào)函數(shù)和回調(diào)注冊(cè)函數(shù),將定時(shí)/超時(shí)服務(wù)函數(shù)注冊(cè)回調(diào),每一次定時(shí)器中斷執(zhí)行一次回調(diào),回調(diào)函數(shù)只需對(duì)計(jì)時(shí)時(shí)間TCNT做減1操作即可。

當(dāng)TCNT為0時(shí)即定時(shí)/超時(shí)時(shí)間到,并置超時(shí)標(biāo)志,應(yīng)用程序只需判斷標(biāo)志即可明確定時(shí)/超時(shí)時(shí)間是否到來;回調(diào)函數(shù)和回調(diào)注冊(cè)函數(shù)定義如下圖所示,多個(gè)超時(shí)/定時(shí)回調(diào)函數(shù)可注冊(cè)在回調(diào)函數(shù)數(shù)組中: aa532fae-0b5b-11ee-962d-dac502259ad0.pngaa60b0de-0b5b-11ee-962d-dac502259ad0.png

定時(shí)中斷函數(shù)中進(jìn)行遍歷處理,定時(shí)中斷函數(shù)處理示意代碼如下圖所示:

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

4、對(duì)比總結(jié)

方案一優(yōu)點(diǎn)在于中斷執(zhí)行單元執(zhí)行內(nèi)容少,代碼操作容易理解,缺點(diǎn)是應(yīng)用中實(shí)時(shí)的進(jìn)行計(jì)算開始和結(jié)束TICK差值,代碼執(zhí)行效率不高。 方案二優(yōu)點(diǎn)在于將超時(shí)函數(shù)注冊(cè)在回調(diào)中即可,程序擴(kuò)展性較好,不用做過多的數(shù)值計(jì)算,代碼執(zhí)行效率相對(duì)較高,缺點(diǎn)是定時(shí)中斷中需要遍歷所有已注冊(cè)的對(duì)調(diào),中斷執(zhí)行內(nèi)容相對(duì)較多。

STM32程序超時(shí)設(shè)計(jì)

在程序設(shè)計(jì)中,出現(xiàn)以下類似語句,是非常不可靠的,很有必要加入超時(shí)處理!


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添加超時(shí):


uint16_t i = 0x0fff;
while((!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))&&i){i--;};

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5068

    文章

    19019

    瀏覽量

    303292
  • STM32
    +關(guān)注

    關(guān)注

    2266

    文章

    10871

    瀏覽量

    354812
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    895

    瀏覽量

    41394
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3237

    瀏覽量

    114471
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3777

    瀏覽量

    80851

原文標(biāo)題:如何設(shè)計(jì)STM32嵌入式程序的超時(shí)機(jī)制?

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式軟件程序設(shè)計(jì)方案

    嵌入式軟件程序設(shè)計(jì)過程中中,經(jīng)常會(huì)遇到超時(shí)(或定時(shí))的處理情況,基本處理思想是在時(shí)間到的時(shí)候進(jìn)行相關(guān)程序處理,下面介紹兩種超時(shí)(或定時(shí))的
    發(fā)表于 09-06 09:27 ?1212次閱讀
    <b class='flag-5'>嵌入式</b>軟件<b class='flag-5'>程序</b>設(shè)計(jì)方案

    espconn_gethostbyname接口DNS解析超時(shí)機(jī)制要自己做嗎?

    espconn_gethostbyname這個(gè)接口,DNS解析超時(shí)機(jī)制要自己做嗎?,這個(gè)接口的回調(diào)函數(shù)是如何觸發(fā)的,有沒有超時(shí)觸發(fā)機(jī)制
    發(fā)表于 07-12 12:29

    請(qǐng)問HAL庫的超時(shí)機(jī)制可以修改嗎?

    HAL庫的超時(shí)機(jī)制,好像都是采用循環(huán)判斷的方式(如下面代碼中的紅色部分),這對(duì)于低功耗控制和程序的時(shí)序控制太不利了,如果超時(shí)比較長,且該段代碼在高優(yōu)先級(jí)的任務(wù)中執(zhí)行,則低優(yōu)先級(jí)的任務(wù)在這段超時(shí)
    發(fā)表于 01-30 07:15

    Linux串口通信的超時(shí)機(jī)制

    在Linux下使用串口通信時(shí),默認(rèn)的阻塞模式是不實(shí)用的。而采用select或epoll機(jī)制的非阻塞模式,寫代碼有比較麻煩。幸好Linux的串口自己就帶有超時(shí)機(jī)制
    發(fā)表于 07-05 08:38

    實(shí)現(xiàn)嵌入式軟件超時(shí)的方法

    鏈接:https://blog.csdn.net/qq_38767222/、https://blog.csdn.net/wyq200704/軟件超時(shí)機(jī)制1、背景在嵌入式軟件程序設(shè)計(jì)過程中,...
    發(fā)表于 12-24 06:01

    嵌入式系統(tǒng)的超時(shí)控制及其應(yīng)用

    預(yù)期事件的循環(huán)等待是嵌入式系統(tǒng)應(yīng)用程序的基本結(jié)構(gòu)之一,在等待程序中引入超時(shí)控制是提高應(yīng)用程序容錯(cuò)性能的重要途徑。給出
    發(fā)表于 05-14 13:50 ?16次下載

    一種基于嵌入式系統(tǒng)的遠(yuǎn)程程序更新機(jī)制

    提出了一種基于嵌入式系統(tǒng)的遠(yuǎn)程程序更新機(jī)制,通過一個(gè)具體的嵌入式遠(yuǎn)程數(shù)字監(jiān)控系統(tǒng)設(shè)計(jì)方案,分析了該機(jī)制的系統(tǒng)結(jié)構(gòu)、實(shí)現(xiàn)原理和實(shí)現(xiàn)流程,實(shí)際的
    發(fā)表于 08-26 11:47 ?16次下載

    STM32嵌入式系統(tǒng)設(shè)計(jì)的智能控制網(wǎng)絡(luò)終端技術(shù)

    STM32嵌入式系統(tǒng)設(shè)計(jì)的智能控制網(wǎng)絡(luò)終端技術(shù) 本文重點(diǎn)介紹基于STM32的智能嵌入式終端的網(wǎng)絡(luò)控制功能的設(shè)計(jì)和實(shí)現(xiàn)。 智能網(wǎng)絡(luò)終端是實(shí)現(xiàn)智能化管理的
    發(fā)表于 05-06 17:39 ?1635次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>嵌入式</b>系統(tǒng)設(shè)計(jì)的智能控制網(wǎng)絡(luò)終端技術(shù)

    基于公平心跳超時(shí)容錯(cuò)機(jī)制

    故障誤判損失模型,提出公平誤判損失(FMJL)算法,使其同時(shí)滿足長作業(yè)和短作業(yè)要求;接著,設(shè)計(jì)并實(shí)現(xiàn)了基于FMJL算法的公平超時(shí)機(jī)制。在實(shí)現(xiàn)了公平超時(shí)機(jī)制的Hadoop上運(yùn)行大約345 s的短作業(yè)時(shí),當(dāng)出現(xiàn)TaskTracker節(jié)點(diǎn)故障時(shí)作業(yè)完成時(shí)間平均
    發(fā)表于 01-02 10:43 ?0次下載

    嵌入式Linux應(yīng)用程序例程

    嵌入式Linux應(yīng)用程序例程(arm嵌入式開發(fā)步驟)-嵌入式Linux應(yīng)用程序例程,有需要的可以參考!
    發(fā)表于 07-30 13:23 ?16次下載
    <b class='flag-5'>嵌入式</b>Linux應(yīng)用<b class='flag-5'>程序</b>例程

    嵌入式詳解

    嵌入式詳解(stm32嵌入式開發(fā)實(shí)例)-嵌入式詳解,有需要的可以參考!
    發(fā)表于 07-30 16:07 ?64次下載
    <b class='flag-5'>嵌入式</b>詳解

    嵌入式軟件定時(shí)/超時(shí)機(jī)制程序設(shè)計(jì)

    一、背景在嵌入式軟件程序設(shè)計(jì)過程中中,經(jīng)常會(huì)遇到超時(shí)(或定時(shí))的處理情況,基本處理思想是在時(shí)間到的時(shí)候進(jìn)行相關(guān)程序處理,下面介紹兩種超時(shí)(或
    發(fā)表于 11-03 18:36 ?10次下載
    <b class='flag-5'>嵌入式</b>軟件定時(shí)/<b class='flag-5'>超時(shí)機(jī)制程序</b>設(shè)計(jì)

    介紹兩種嵌入式軟件超時(shí)(或定時(shí))的程序設(shè)計(jì)方案

    嵌入式軟件程序設(shè)計(jì)過程中中,經(jīng)常會(huì)遇到超時(shí)(或定時(shí))的處理情況,基本處理思想是在時(shí)間到的時(shí)候進(jìn)行相關(guān)程序處理,下面介紹兩種超時(shí)(或定時(shí))的
    的頭像 發(fā)表于 05-20 10:28 ?961次閱讀
    介紹兩種<b class='flag-5'>嵌入式</b>軟件<b class='flag-5'>超時(shí)</b>(或定時(shí))的<b class='flag-5'>程序</b>設(shè)計(jì)方案

    STM32程序超時(shí)設(shè)計(jì)

    軟件超時(shí)機(jī)制 1、背景 在嵌入式軟件程序設(shè)計(jì)過程中中,經(jīng)常會(huì)遇到超時(shí)(或定時(shí))的處理情況,基本處理思想是在時(shí)間到的時(shí)候進(jìn)行相關(guān)程序處理,下面
    的頭像 發(fā)表于 06-22 10:52 ?1120次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>程序</b><b class='flag-5'>超時(shí)</b>設(shè)計(jì)

    嵌入式軟件中兩種超時(shí)程序設(shè)計(jì)方案

    1、背景 在嵌入式軟件程序設(shè)計(jì)過程中中,經(jīng)常會(huì)遇到超時(shí)(或定時(shí))的處理情況,基本處理思想是在時(shí)間到的時(shí)候進(jìn)行相關(guān)程序處理,下面介紹兩種超時(shí)
    的頭像 發(fā)表于 10-27 15:15 ?648次閱讀
    <b class='flag-5'>嵌入式</b>軟件中兩種<b class='flag-5'>超時(shí)</b><b class='flag-5'>程序</b>設(shè)計(jì)方案