FreeRTOS 開(kāi)關(guān)中斷
FreeRTOS 開(kāi)關(guān)中斷函數(shù)為 portENABLE_INTERRUPTS ()和 portDISABLE_INTERRUPTS(),這兩個(gè)函數(shù)其實(shí)是宏定義,在 portmacro.h 中有定義,如下:
#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0)
可以看出開(kāi)關(guān)中斷實(shí)際上是通過(guò)函數(shù) vPortSetBASEPRI(0)和 vPortRaiseBASEPRI()來(lái)實(shí)現(xiàn)的。
函數(shù) vPortSetBASEPRI()是向寄存器 BASEPRI 寫(xiě)入一個(gè)值,此值作為參數(shù) ulBASEPRI 傳 遞進(jìn)來(lái),portENABLE_INTERRUPTS()是開(kāi)中斷,它傳遞了個(gè) 0 給 vPortSetBASEPRI(),根據(jù)我們前面講解 BASEPRI 寄存器可知,結(jié)果就是開(kāi)中斷。
函 數(shù) vPortRaiseBASEPRI() 是 向 寄 存 器 BASEPRI 寫(xiě) 入 宏configMAX_SYSCALL_INTERRUPT_PRIORITY , 那 么 優(yōu) 先 級(jí) 低 于configMAX_SYSCALL_INTERRUPT_PRIORITY 的中斷就會(huì)被屏蔽!
臨界段代碼
臨界段代碼也叫做臨界區(qū),是指那些必須完整運(yùn)行,不能被打斷的代碼段,比如有的外設(shè)的初始化需要嚴(yán)格的時(shí)序,初始化過(guò)程中不能被打斷。FreeRTOS 在進(jìn)入臨界段代碼的時(shí)候需要關(guān)閉中斷,當(dāng)處理完臨界段代碼以后再打開(kāi)中斷。FreeRTOS 系統(tǒng)本身就有很多的臨界段代碼,這些代碼都加了臨界段代碼保護(hù),我們?cè)趯?xiě)自己的用戶程序的時(shí)候有些地方也需要添加臨界段代碼保護(hù)。
FreeRTOS 與 臨 界 段 代 碼 保 護(hù) 有 關(guān) 的 函 數(shù) 有 4 個(gè) :taskENTER_CRITICAL() 、taskEXIT_CRITICAL() 、 taskENTER_CRITICAL_FROM_ISR() 和taskEXIT_CRITICAL_FROM_ISR(),這四個(gè)函數(shù)其實(shí)是宏定義,在 task.h 文件中有定義。這四個(gè)函數(shù)的區(qū)別是前兩個(gè)是任務(wù)級(jí)的臨界段代碼保護(hù),后兩個(gè)是中斷級(jí)的臨界段代碼保護(hù)。
任務(wù)級(jí)臨界代碼保護(hù)使用方法如下:
中斷級(jí)臨界代碼保護(hù)使用方法如下:
-
開(kāi)關(guān)
+關(guān)注
關(guān)注
19文章
3144瀏覽量
93916 -
嵌入式
+關(guān)注
關(guān)注
5093文章
19178瀏覽量
307713 -
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121194 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62978 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62399
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
FreeRTOS中斷測(cè)試避坑指南
![<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b>測(cè)試避坑指南](https://file1.elecfans.com/web2/M00/B7/39/wKgaomWDj2uAYeFdAAAbCOFPQsQ018.jpg)
轉(zhuǎn):第15章 FreeRTOS臨界段和開(kāi)關(guān)中斷
轉(zhuǎn)第16章 FreeRTOS調(diào)度鎖,任務(wù)鎖和中斷鎖
為什么ucosII移植后開(kāi)關(guān)中斷函數(shù)總是報(bào)錯(cuò)?
STM32,NVIC不能通過(guò)FreeRTOS開(kāi)關(guān)中斷函數(shù)屏蔽中斷是怎么回事
FreeRTOS_中斷Github簡(jiǎn)介
怎樣去使用FreeRTOS的中斷配置和臨界段呢
RTThread中開(kāi)關(guān)中斷的具體實(shí)現(xiàn)過(guò)程以及進(jìn)入臨界區(qū)的相關(guān)操作說(shuō)明
請(qǐng)問(wèn)ch32v307全局中斷開(kāi)關(guān)定義怎樣寫(xiě)?
燈管預(yù)熱和中斷定時(shí)器電路圖
![燈管預(yù)熱和<b class='flag-5'>中斷定</b>時(shí)器電路圖](https://file1.elecfans.com//web2/M00/A5/28/wKgZomUMNyyAYoCKAAAdtAcMnL0202.gif)
基于STM32應(yīng)用的FreeRTOS中斷設(shè)置
![基于STM32應(yīng)用的<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b>設(shè)置](https://file1.elecfans.com//web2/M00/A6/FB/wKgZomUMQZ6AVlhhAAASxLTw_Fk221.jpg)
STM32之FreeRTOS:(一) 中斷配置和臨界段的使用
![STM32之<b class='flag-5'>FreeRTOS</b>:(一) <b class='flag-5'>中斷</b>配置和臨界段的使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Cortex-M中斷及FreeRTOS中斷優(yōu)先級(jí)配置原理
![Cortex-M<b class='flag-5'>中斷</b>及<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b>優(yōu)先級(jí)配置原理](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論