chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

中斷里面這樣延時(shí),有點(diǎn)猛~

嵌入式情報(bào)局 ? 來(lái)源:TopSemic嵌入式 ? 2023-11-12 11:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近一工程師向我反饋一個(gè)問(wèn)題,Ta說(shuō):我程序會(huì)死在這一行,大概是什么原因?

828abfec-803f-11ee-939d-92fbcf53809c.png

以下是Ta所說(shuō)程序會(huì)死的地方,

8295b14a-803f-11ee-939d-92fbcf53809c.png

用過(guò)HAL庫(kù)的童鞋應(yīng)該比較熟悉這個(gè)函數(shù),它是延時(shí)函數(shù)。

82aca7c4-803f-11ee-939d-92fbcf53809c.png

拿到工程代碼后我就開(kāi)始Debug之旅了,現(xiàn)象確實(shí)如Ta所說(shuō),剛開(kāi)始Hal_delay函數(shù)調(diào)用沒(méi)問(wèn)題,但是過(guò)了幾秒之后就卡住了。因?yàn)樵摵瘮?shù)的計(jì)時(shí)是依賴Systick中斷,這個(gè)現(xiàn)象說(shuō)明Systick中斷進(jìn)不去了,通過(guò)debug模式下Systick中斷服務(wù)函數(shù)里加斷點(diǎn),可以驗(yàn)證這一點(diǎn)。但是為什么剛開(kāi)始好好的,后面就進(jìn)不去中斷了呢?最初我想是不是Systick中斷被關(guān)掉了,通過(guò)查看Systick寄存器,發(fā)現(xiàn)并沒(méi)有,Systick依然在計(jì)時(shí)并且中斷使能也沒(méi)有關(guān)。

程序里初始化時(shí)開(kāi)啟了RTC中斷,周期是1s,Systick中斷周期是1ms。剛開(kāi)始時(shí)這兩個(gè)中斷都能進(jìn),幾秒之后這倆中斷就都進(jìn)不去了。

82b81e9c-803f-11ee-939d-92fbcf53809c.png

這個(gè)現(xiàn)象看起來(lái)確實(shí)挺詭異,因?yàn)榻o我的代碼里糅雜了很多業(yè)務(wù)代碼,寫(xiě)的也有點(diǎn)亂,看的我很煩躁,后來(lái)還是靜下心來(lái)仔細(xì)的分析,找到了問(wèn)題所在。

原因是這樣:Ta在RTC的中斷服務(wù)函數(shù)里,在某個(gè)分支函數(shù)里調(diào)用了Hal_delay函數(shù)。因?yàn)镽TC的中斷優(yōu)先級(jí)和Systick中斷優(yōu)先級(jí)一樣,所以Systick中斷就進(jìn)不去了,導(dǎo)致Hal_delay函數(shù)也就執(zhí)行不過(guò)去了,所以就出現(xiàn)了所謂的卡死現(xiàn)象。之所以剛開(kāi)始沒(méi)問(wèn)題,過(guò)了幾秒才出問(wèn)題,是因?yàn)閯傞_(kāi)始前幾秒的RTC中斷服務(wù)函數(shù)里沒(méi)有進(jìn)到調(diào)用Hal_delay函數(shù)的那個(gè)分支處理里,Ta是在初始化幾秒之后,設(shè)置了一個(gè)標(biāo)志位,導(dǎo)致后來(lái)RTC中斷處理里調(diào)用了Hal_delay函數(shù)。

問(wèn)題找到了,如何解決呢?

最簡(jiǎn)單的方法是,把Systick和RTC的中斷優(yōu)先級(jí)設(shè)置不一樣,讓Systick優(yōu)先級(jí)比RTC高一點(diǎn),這樣可以保證Systick中斷能夠打斷RTC中斷,從而不會(huì)卡死。

ARM Cortex MCU的中斷控制器英文名叫做NVIC,Nested Vectored Interrupt Controller,翻譯過(guò)來(lái)就是嵌套向量中斷控制器,所謂中斷嵌套是指當(dāng)正在執(zhí)行一個(gè)中斷服務(wù)程序時(shí),這時(shí)如果來(lái)了優(yōu)先級(jí)更高的中斷,新來(lái)的中斷會(huì)打斷原來(lái)還沒(méi)有處理完的中斷服務(wù)程序,等新中斷處理完畢之后再回到原中斷服務(wù)繼續(xù)處理。

Cortex-M0/M0+中斷優(yōu)先級(jí)設(shè)置非常簡(jiǎn)單,只需要通過(guò)CMSIS標(biāo)準(zhǔn)接口函數(shù)__NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)即可完成,優(yōu)先級(jí)只有4個(gè),分別為0、1、2、3,數(shù)字越小優(yōu)先級(jí)越高。

問(wèn)題解決了,總結(jié)不能少:

1)我當(dāng)時(shí)找這個(gè)問(wèn)題花了較長(zhǎng)時(shí)間,反思一下,其實(shí)是可以更快的定位問(wèn)題的。當(dāng)卡死在Hal_delay函數(shù)時(shí),首先應(yīng)該去分析是哪里調(diào)用這個(gè)函數(shù)導(dǎo)致卡死的,因?yàn)楣こ汤镎{(diào)用的地方有好多處,可以通過(guò)在可能出現(xiàn)問(wèn)題的調(diào)用前給一個(gè)全局變量賦不同的值,卡住時(shí)看全局變量,就可以定位到是從哪里進(jìn)去的。這樣倒著往前推,可以更快的定位問(wèn)題。

2)通常情況下中斷服務(wù)函數(shù)應(yīng)該盡可能的短,最好不要在中斷里做延時(shí)之類(lèi)的占用CPU時(shí)間長(zhǎng)的工作。

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

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124498
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64877
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    13596

原文標(biāo)題:中斷里面這樣延時(shí),有點(diǎn)猛~

文章出處:【微信號(hào):嵌入式情報(bào)局,微信公眾號(hào):嵌入式情報(bào)局】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32C031C6在按鍵中斷處理程序中使用HAL_Delay()延時(shí)函數(shù),程序則無(wú)法運(yùn)行怎么解決?

    測(cè)試STM32C031C6開(kāi)發(fā)板的長(zhǎng)短按鍵,在按鍵中斷處理程序中使用HAL_Delay()延時(shí)函數(shù),程序則無(wú)法運(yùn)行,類(lèi)似進(jìn)入了死循環(huán),于是則添加了延時(shí)函數(shù)如下: /[i
    發(fā)表于 03-07 06:50

    斷電延時(shí)繼電器的應(yīng)用

    延時(shí)繼電器作為一種重要的電氣控制元件,在現(xiàn)代電氣系統(tǒng)中發(fā)揮著不可或缺的作用。其基于一個(gè)或多個(gè)可調(diào)的計(jì)時(shí)器電路,通過(guò)與繼電器相連的控制電路,實(shí)現(xiàn)了在電路中定時(shí)閉合或斷開(kāi)控制的功能。 一、工作原理 延時(shí)
    的頭像 發(fā)表于 02-07 16:07 ?1156次閱讀

    串口中斷是內(nèi)部中斷還是外部中斷,串口中斷是怎么觸發(fā)的

    串口中斷通常被視為外部中斷。雖然串口控制器(如USART、UART等)可能集成在微控制器或處理器的內(nèi)部,但從中斷的角度來(lái)看,串口中斷是由處理器外部的通信事件觸發(fā)的。這些事件包括數(shù)據(jù)的接
    的頭像 發(fā)表于 01-29 15:03 ?1796次閱讀

    延時(shí)繼電器功能匯總與應(yīng)用

    延時(shí)繼電器是一種在電氣系統(tǒng)中廣泛應(yīng)用的控制元件,在電路中實(shí)現(xiàn)定時(shí)閉合或斷開(kāi)控制,為各種應(yīng)用場(chǎng)景提供靈活的時(shí)間管理功能。 通常,聚英延時(shí)繼電器由一個(gè)控制電壓引發(fā),該控制電壓可以是任何符合電器設(shè)備功能
    的頭像 發(fā)表于 01-17 16:03 ?683次閱讀

    延時(shí)繼電器應(yīng)用場(chǎng)景

    延時(shí)繼電器是一種在電氣系統(tǒng)中廣泛應(yīng)用的控制元件,通過(guò)引入延時(shí)功能,實(shí)現(xiàn)了在電路中定時(shí)閉合或斷開(kāi)控制的重要任務(wù)。 延時(shí)繼電器的工作原理,基于一個(gè)或多個(gè)可調(diào)的計(jì)時(shí)器電路,2路/4路/8路電路與繼電器相連
    的頭像 發(fā)表于 01-16 16:27 ?651次閱讀

    AM1305采樣延時(shí)很長(zhǎng)是哪里的問(wèn)題?

    在使用AM1305作為電機(jī)的相電流采樣時(shí)候,如果按照20MHz的時(shí)鐘,256的OSR,輸出為16位,那延時(shí)就是50ns*256*2=25.6us,這樣的采樣延時(shí)也太長(zhǎng)了吧,還是我計(jì)算的不對(duì)?
    發(fā)表于 12-11 08:30

    力源電池-紐扣電池系列:CR系列鋰扣式產(chǎn)品介紹

    深圳鴻合智遠(yuǎn)|力源電池-紐扣電池系列:CR系列鋰扣式產(chǎn)品介紹
    的頭像 發(fā)表于 12-02 11:03 ?810次閱讀
    力源電池-紐扣電池系列:CR系列鋰<b class='flag-5'>猛</b>扣式產(chǎn)品介紹

    FPGA延時(shí)Verilog HDL實(shí)現(xiàn)

    可以在任意時(shí)刻啟動(dòng),可以重復(fù)啟動(dòng),延時(shí)時(shí)長(zhǎng)可調(diào),單位可切換(ms/us),在50MHz時(shí)鐘下的延時(shí)范圍是1ms-85899ms/1us-85899us。
    的頭像 發(fā)表于 11-05 11:26 ?826次閱讀

    延時(shí)開(kāi)關(guān)需要零線嗎為什么

    延時(shí)開(kāi)關(guān)是一種常見(jiàn)的電氣控制元件,廣泛應(yīng)用于各種電氣設(shè)備和系統(tǒng)中。它的作用是在電路中引入一定的延時(shí),以實(shí)現(xiàn)對(duì)電路的控制和保護(hù)。延時(shí)開(kāi)關(guān)的種類(lèi)很多,包括機(jī)械式延時(shí)開(kāi)關(guān)、電子式
    的頭像 發(fā)表于 08-19 15:56 ?1074次閱讀

    延時(shí)開(kāi)關(guān)接線技巧與注意事項(xiàng)有哪些

    延時(shí)開(kāi)關(guān)的接線技巧與注意事項(xiàng)是確保延時(shí)開(kāi)關(guān)正確安裝和穩(wěn)定運(yùn)行的關(guān)鍵。 一、延時(shí)開(kāi)關(guān)接線技巧 1. 理解延時(shí)開(kāi)關(guān)的基本結(jié)構(gòu) 延時(shí)開(kāi)關(guān)通常包含多
    的頭像 發(fā)表于 08-19 15:54 ?2522次閱讀

    延時(shí)開(kāi)關(guān)改手動(dòng)開(kāi)關(guān)怎么接線

    延時(shí)開(kāi)關(guān)和手動(dòng)開(kāi)關(guān)是兩種不同類(lèi)型的開(kāi)關(guān),它們的工作原理和接線方式也有所不同。在某些情況下,我們可能需要將延時(shí)開(kāi)關(guān)改為手動(dòng)開(kāi)關(guān),以滿足特定的使用需求。 一、延時(shí)開(kāi)關(guān)和手動(dòng)開(kāi)關(guān)的區(qū)別 工作原理
    的頭像 發(fā)表于 08-19 15:49 ?1615次閱讀

    延時(shí)開(kāi)關(guān)怎么調(diào)時(shí)間長(zhǎng)短

    延時(shí)開(kāi)關(guān)是一種常見(jiàn)的電子控制設(shè)備,廣泛應(yīng)用于各種場(chǎng)合,如照明、空調(diào)、風(fēng)扇等。它可以根據(jù)用戶的需求,設(shè)定一定的延時(shí)時(shí)間,實(shí)現(xiàn)自動(dòng)控制。 一、延時(shí)開(kāi)關(guān)的工作原理 延時(shí)開(kāi)關(guān)的基本組成
    的頭像 發(fā)表于 08-19 15:46 ?5007次閱讀

    延時(shí)開(kāi)關(guān)上l和a是什么意思

    延時(shí)開(kāi)關(guān)是一種常見(jiàn)的電子控制元件,廣泛應(yīng)用于各種電子設(shè)備和系統(tǒng)中。它可以實(shí)現(xiàn)對(duì)電路的自動(dòng)控制,使電路在一定的延時(shí)后自動(dòng)接通或斷開(kāi)。在延時(shí)開(kāi)關(guān)的標(biāo)識(shí)中,L和A通常代表不同的意義。 一、延時(shí)
    的頭像 發(fā)表于 08-19 15:45 ?8123次閱讀

    2024這款A(yù)IPC迷你主機(jī)有點(diǎn)

    。未來(lái),隨著AI技術(shù)的不斷發(fā)展和普及,我們有理由相信,像華碩PN65這樣的高性能迷你主機(jī)將會(huì)更加普及,成為更多用戶的心儀之選。 不管你是玩游戲,直播,視頻剪輯還是正常辦公或者你正在尋找一款既小巧又強(qiáng)大的電腦主機(jī),那么華碩PN65絕對(duì)值得你深入了解和考慮。
    的頭像 發(fā)表于 07-30 17:35 ?803次閱讀
    2024這款A(yù)IPC迷你主機(jī)<b class='flag-5'>有點(diǎn)</b><b class='flag-5'>猛</b>

    揭秘:?jiǎn)纹瑱C(jī)硬件與軟件延時(shí)之大不同!

    在嵌入式項(xiàng)目中,軟件開(kāi)發(fā)基本上都會(huì)使用到延時(shí),那么,該用軟件延時(shí)還是硬件延時(shí)?它們又有什么區(qū)別呢?今天就來(lái)講講關(guān)于硬件延時(shí)和軟件延時(shí)的內(nèi)容,
    的頭像 發(fā)表于 07-25 08:11 ?1390次閱讀
    揭秘:?jiǎn)纹瑱C(jī)硬件與軟件<b class='flag-5'>延時(shí)</b>之大不同!