女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

中斷里面這樣延時,有點猛~

嵌入式情報局 ? 來源:TopSemic嵌入式 ? 2023-11-12 11:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近一工程師向我反饋一個問題,Ta說:我程序會死在這一行,大概是什么原因?

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

以下是Ta所說程序會死的地方,

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

用過HAL庫的童鞋應該比較熟悉這個函數,它是延時函數。

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

拿到工程代碼后我就開始Debug之旅了,現象確實如Ta所說,剛開始Hal_delay函數調用沒問題,但是過了幾秒之后就卡住了。因為該函數的計時是依賴Systick中斷,這個現象說明Systick中斷進不去了,通過debug模式下Systick中斷服務函數里加斷點,可以驗證這一點。但是為什么剛開始好好的,后面就進不去中斷了呢?最初我想是不是Systick中斷被關掉了,通過查看Systick寄存器,發現并沒有,Systick依然在計時并且中斷使能也沒有關。

程序里初始化時開啟了RTC中斷,周期是1s,Systick中斷周期是1ms。剛開始時這兩個中斷都能進,幾秒之后這倆中斷就都進不去了。

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

這個現象看起來確實挺詭異,因為給我的代碼里糅雜了很多業務代碼,寫的也有點亂,看的我很煩躁,后來還是靜下心來仔細的分析,找到了問題所在。

原因是這樣:Ta在RTC的中斷服務函數里,在某個分支函數里調用了Hal_delay函數。因為RTC的中斷優先級和Systick中斷優先級一樣,所以Systick中斷就進不去了,導致Hal_delay函數也就執行不過去了,所以就出現了所謂的卡死現象。之所以剛開始沒問題,過了幾秒才出問題,是因為剛開始前幾秒的RTC中斷服務函數里沒有進到調用Hal_delay函數的那個分支處理里,Ta是在初始化幾秒之后,設置了一個標志位,導致后來RTC中斷處理里調用了Hal_delay函數。

問題找到了,如何解決呢?

最簡單的方法是,把Systick和RTC的中斷優先級設置不一樣,讓Systick優先級比RTC高一點,這樣可以保證Systick中斷能夠打斷RTC中斷,從而不會卡死。

ARM Cortex MCU的中斷控制器英文名叫做NVIC,Nested Vectored Interrupt Controller,翻譯過來就是嵌套向量中斷控制器,所謂中斷嵌套是指當正在執行一個中斷服務程序時,這時如果來了優先級更高的中斷,新來的中斷會打斷原來還沒有處理完的中斷服務程序,等新中斷處理完畢之后再回到原中斷服務繼續處理。

Cortex-M0/M0+中斷優先級設置非常簡單,只需要通過CMSIS標準接口函數__NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)即可完成,優先級只有4個,分別為0、1、2、3,數字越小優先級越高。

問題解決了,總結不能少:

1)我當時找這個問題花了較長時間,反思一下,其實是可以更快的定位問題的。當卡死在Hal_delay函數時,首先應該去分析是哪里調用這個函數導致卡死的,因為工程里調用的地方有好多處,可以通過在可能出現問題的調用前給一個全局變量賦不同的值,卡住時看全局變量,就可以定位到是從哪里進去的。這樣倒著往前推,可以更快的定位問題。

2)通常情況下中斷服務函數應該盡可能的短,最好不要在中斷里做延時之類的占用CPU時間長的工作。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5434

    瀏覽量

    124442
  • 函數
    +關注

    關注

    3

    文章

    4380

    瀏覽量

    64849
  • Systick
    +關注

    關注

    0

    文章

    63

    瀏覽量

    13588

原文標題:中斷里面這樣延時,有點猛~

文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    測試STM32C031C6開發板的長短按鍵,在按鍵中斷處理程序中使用HAL_Delay()延時函數,程序則無法運行,類似進入了死循環,于是則添加了延時函數如下: /[i
    發表于 03-07 06:50

    斷電延時繼電器的應用

    延時繼電器作為一種重要的電氣控制元件,在現代電氣系統中發揮著不可或缺的作用。其基于一個或多個可調的計時器電路,通過與繼電器相連的控制電路,實現了在電路中定時閉合或斷開控制的功能。 一、工作原理 延時
    的頭像 發表于 02-07 16:07 ?1146次閱讀

    串口中斷是內部中斷還是外部中斷,串口中斷是怎么觸發的

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

    延時繼電器功能匯總與應用

    延時繼電器是一種在電氣系統中廣泛應用的控制元件,在電路中實現定時閉合或斷開控制,為各種應用場景提供靈活的時間管理功能。 通常,聚英延時繼電器由一個控制電壓引發,該控制電壓可以是任何符合電器設備功能
    的頭像 發表于 01-17 16:03 ?669次閱讀

    延時繼電器應用場景

    延時繼電器是一種在電氣系統中廣泛應用的控制元件,通過引入延時功能,實現了在電路中定時閉合或斷開控制的重要任務。 延時繼電器的工作原理,基于一個或多個可調的計時器電路,2路/4路/8路電路與繼電器相連
    的頭像 發表于 01-16 16:27 ?646次閱讀

    力源電池-紐扣電池系列:CR系列鋰扣式產品介紹

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

    FPGA延時Verilog HDL實現

    可以在任意時刻啟動,可以重復啟動,延時時長可調,單位可切換(ms/us),在50MHz時鐘下的延時范圍是1ms-85899ms/1us-85899us。
    的頭像 發表于 11-05 11:26 ?824次閱讀

    延時開關需要零線嗎為什么

    延時開關是一種常見的電氣控制元件,廣泛應用于各種電氣設備和系統中。它的作用是在電路中引入一定的延時,以實現對電路的控制和保護。延時開關的種類很多,包括機械式延時開關、電子式
    的頭像 發表于 08-19 15:56 ?1062次閱讀

    延時開關接線技巧與注意事項有哪些

    延時開關的接線技巧與注意事項是確保延時開關正確安裝和穩定運行的關鍵。 一、延時開關接線技巧 1. 理解延時開關的基本結構 延時開關通常包含多
    的頭像 發表于 08-19 15:54 ?2506次閱讀

    延時開關改手動開關怎么接線

    延時開關和手動開關是兩種不同類型的開關,它們的工作原理和接線方式也有所不同。在某些情況下,我們可能需要將延時開關改為手動開關,以滿足特定的使用需求。 一、延時開關和手動開關的區別 工作原理
    的頭像 發表于 08-19 15:49 ?1599次閱讀

    延時開關怎么調時間長短

    延時開關是一種常見的電子控制設備,廣泛應用于各種場合,如照明、空調、風扇等。它可以根據用戶的需求,設定一定的延時時間,實現自動控制。 一、延時開關的工作原理 延時開關的基本組成
    的頭像 發表于 08-19 15:46 ?4981次閱讀

    延時開關上l和a是什么意思

    延時開關是一種常見的電子控制元件,廣泛應用于各種電子設備和系統中。它可以實現對電路的自動控制,使電路在一定的延時后自動接通或斷開。在延時開關的標識中,L和A通常代表不同的意義。 一、延時
    的頭像 發表于 08-19 15:45 ?8118次閱讀

    2024這款AIPC迷你主機有點

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

    揭秘:單片機硬件與軟件延時之大不同!

    在嵌入式項目中,軟件開發基本上都會使用到延時,那么,該用軟件延時還是硬件延時?它們又有什么區別呢?今天就來講講關于硬件延時和軟件延時的內容,
    的頭像 發表于 07-25 08:11 ?1387次閱讀
    揭秘:單片機硬件與軟件<b class='flag-5'>延時</b>之大不同!

    斷電延時繼電器的實際應用

    斷電延時繼電器作為一種常見的電器設備,在現代生活中有著廣泛的應用。它通過控制電路的開關時間來實現電器設備的延時關閉,從而達到省電、安全等目的。以下將結合多個應用實例,詳細闡述斷電延時繼電器的實際應用。
    的頭像 發表于 07-17 16:51 ?2280次閱讀