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

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

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

RT-Thread入門學(xué)習(xí)筆記-熟悉全局中斷的操作

冬至子 ? 來源:張世爭 ? 作者:張世爭 ? 2023-06-07 14:58 ? 次閱讀

前言

RT-Thread中,全局中斷的操作很多,大家都知道全局中斷的【disable】與【enable】

需要正確的理解全局中斷的disable與enable。

如下,保證鏈表的正確操作,【中斷保護(hù)】

/* lock interrupt */
temp = rt_hw_interrupt_disable();
/* remove from old list */
rt_list_remove(&(object- >list));
/* unlock interrupt */
rt_hw_interrupt_enable(temp);

問題與分析:

rt_hw_interrupt_disable后,就無法觸發(fā)中斷了嗎?

經(jīng)過實(shí)際的驗(yàn)證,與分析rt_hw_interrupt_disable的實(shí)現(xiàn)方法:得到如下結(jié)論:

rt_hw_interrupt_disable 只是屏蔽了全局【中斷請求】,配置使能的中斷,依舊可以【中斷】,只是,中斷處理函數(shù)ISR,暫不執(zhí)行。

也就是說,如果硬件配置使能了中斷,rt_hw_interrupt_disable 后,依舊具備【中斷】功能。如你配置一個GPIO外部中斷,并使能中斷。rt_hw_interrupt_disable 后,外部中斷可以產(chǎn)生,只是不觸發(fā)執(zhí)行【ISR】。

【重點(diǎn)】:當(dāng)rt_hw_interrupt_disable 后,觸發(fā)的中斷,ISR暫時無法執(zhí)行,但硬件正常置【pending】中斷標(biāo)志位。

當(dāng)rt_hw_interrupt_enable后,【pending】的中斷,會執(zhí)行中斷【ISR】處理程序。

概念的梳理

單個中斷的產(chǎn)生:配置使能硬件中斷,如按鍵,GPIO外部中斷,按下觸發(fā)中斷,硬件置【pending】中斷標(biāo)志位,并執(zhí)行中斷【ISR】

單個中斷的禁止:配置禁能硬件中斷,如按鍵,按下不再觸發(fā)中斷。即使有【ISR】中斷處理函數(shù),不會執(zhí)行。

全局中斷的禁止:也就是不再觸發(fā)任何物理中斷,【沒找到這個功能函數(shù)】!

全局中斷請求的屏蔽:rt_hw_interrupt_disable,觸發(fā)的中斷,只能置【pending】中斷標(biāo)志位,CPU繼續(xù)執(zhí)行操作。

互斥或是臨界值的操作,可以使用屏蔽全局中斷請求+處理+打開全局中斷請求的方式,讓操作獨(dú)占的方式完成操作。

梳理RT-Thread PM中睡眠流程

睡眠操作執(zhí)行在:idle線程(最低線程優(yōu)先級)

進(jìn)入SLEEP前,是禁止全局中斷請求的!rt_hw_interrupt_disable

睡眠前的引腳處理等,進(jìn)入睡眠,CPU停止運(yùn)行,【凍結(jié)】在這里??!

睡眠過程中,依舊可以被【使能的中斷】,如按鍵GPIO外部中斷、LPTimer等觸發(fā)并喚醒CPU。

CPU喚醒后,繼續(xù)下一條操作,【睡眠后的處理】

PM退出睡眠,開啟全局中斷請求rt_hw_interrupt_enable,此時,開啟響應(yīng)中斷ISR。

根據(jù)中斷【pending】標(biāo)志位,進(jìn)入喚醒中斷處理函數(shù)【ISR】并執(zhí)行。

如此,深睡眠時,系統(tǒng)時鐘停了,引腳關(guān)了,喚醒時,恢復(fù)時鐘與引腳即可!【睡眠整個流程是完整的】

不用擔(dān)心會被中斷切出去,甚至任務(wù)切換,造成系統(tǒng)運(yùn)行在錯誤的時鐘下。

不用擔(dān)心關(guān)閉了全局中斷請求,按鍵、LPTimer等,無法觸發(fā)中斷,喚醒MCU。

1.jpg

總結(jié)

需要正確的理解中斷的觸發(fā)及執(zhí)行流程

正確的理解RT-Thead 全局中斷的操作:rt_hw_interrupt_disable 與 rt_hw_interrupt_enable.

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

    關(guān)注

    16

    文章

    1184

    瀏覽量

    51768
  • ISR
    ISR
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    14382
  • 外部中斷
    +關(guān)注

    關(guān)注

    1

    文章

    131

    瀏覽量

    15760
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1251

    瀏覽量

    39753
  • MCU芯片
    +關(guān)注

    關(guān)注

    3

    文章

    245

    瀏覽量

    11325
收藏 人收藏

    評論

    相關(guān)推薦

    RT-Thread學(xué)習(xí)筆記】使用scons命令生成靜態(tài)庫

    RT-Thread學(xué)習(xí)筆記】如何使用scons 命令中buildlib的生成靜態(tài)庫?
    的頭像 發(fā)表于 07-27 09:13 ?5730次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】使用scons命令生成靜態(tài)庫

    RT-Thread內(nèi)核對象操作API詳解

    目的還是學(xué)習(xí)熟悉RT-Thread 操作系統(tǒng)。
    發(fā)表于 06-02 09:48 ?467次閱讀
    <b class='flag-5'>RT-Thread</b>內(nèi)核對象<b class='flag-5'>操作</b>API詳解

    RT-Thread Nano入門學(xué)習(xí)筆記

    RT-Thread Nano入門學(xué)習(xí)筆記
    發(fā)表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> Nano<b class='flag-5'>入門</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 設(shè)備模型rt_device的理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 設(shè)備模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 內(nèi)核對象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象初始化鏈表組織方式

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:24 ?3次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 內(nèi)核對象初始化鏈表組織方式

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象操作API

    RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
    發(fā)表于 01-25 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 內(nèi)核對象<b class='flag-5'>操作</b>API

    RT-Thread學(xué)習(xí)筆記分享

    我是從2020年11月初開始學(xué)習(xí)RT-Thread實(shí)時操作系統(tǒng)的,在學(xué)習(xí)RT-Thread之前,我接觸過uCOS和FreeRTOS,但這兩個
    的頭像 發(fā)表于 01-27 18:52 ?2037次閱讀

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    的種種優(yōu)越之處。RT-Thread 是一款完全由國內(nèi)團(tuán)隊(duì)開發(fā)維護(hù)的嵌入式實(shí)時操作系統(tǒng)(RTOS),具有完全的自主知識產(chǎn)權(quán)。經(jīng)過 16 個年頭的沉淀,伴隨著物聯(lián)網(wǎng)的興起,它正演變成一個功能強(qiáng)大、組件豐富的物
    的頭像 發(fā)表于 07-09 11:27 ?4403次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread學(xué)習(xí)筆記】Makefile的FORCE

    RT-Thread學(xué)習(xí)筆記】十分鐘學(xué)會Makefile的FORCE
    的頭像 發(fā)表于 07-30 13:55 ?2353次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】Makefile的FORCE

    RT-Thread學(xué)習(xí)筆記】如何抓取終端的網(wǎng)絡(luò)報文

    RT-Thread學(xué)習(xí)筆記】如何抓取終端的網(wǎng)絡(luò)報文?
    的頭像 發(fā)表于 07-30 13:57 ?2667次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】如何抓取終端的網(wǎng)絡(luò)報文

    RT-Thread學(xué)習(xí)筆記】用memwatch排除內(nèi)存泄露

    RT-Thread學(xué)習(xí)筆記】使用memwatch排除內(nèi)存泄露
    的頭像 發(fā)表于 07-30 14:01 ?2159次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】用memwatch排除內(nèi)存泄露

    RT-Thread文檔_中斷管理

    RT-Thread文檔_中斷管理
    發(fā)表于 02-22 18:30 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>中斷</b>管理

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?3676次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>學(xué)習(xí)</b>