cortex M内核优先级设置
Cortex M內(nèi)核中
每個中斷都有一個8位的優(yōu)先級設(shè)置寄存器
這個8位的寄存器可以分為搶占優(yōu)先級和子優(yōu)先級兩個部分(通過設(shè)置優(yōu)先級組設(shè)置)
搶占優(yōu)先級和子優(yōu)先級有什么用?
舉例說明:
有兩個中斷A、B
A的搶占優(yōu)先級比B的高
當(dāng)B發(fā)生中斷,正在執(zhí)行B的中斷服務(wù)函數(shù)時
A發(fā)生了中斷,這個時候,會跳轉(zhuǎn)到A的中斷服務(wù)函數(shù)
A的中斷服務(wù)函數(shù)執(zhí)行完畢后,再接著執(zhí)行B的中斷服務(wù)函數(shù)
這就是中斷搶占
子優(yōu)先級的作用是當(dāng)兩個中斷的搶占優(yōu)先級相同時,這兩個中斷同時發(fā)生(或者都被掛起的狀態(tài)下)
子優(yōu)先級高的先執(zhí)行,低的暫時掛起,等子優(yōu)先級高的執(zhí)行完后再執(zhí)行
由于搶占優(yōu)先級一樣,不會發(fā)生中斷搶占
雖然這個是8位的寄存器,但是一般的單片機(jī)都不會使用全部8位
規(guī)定最少使用高3位(具體可以參考《Cortex-M4權(quán)威指南》)
LPC54606的優(yōu)先級就只用了高3位(程序注釋可能沒有改)
而K60、K66、KV58、RT1052都是用了高4位
只用高3位的情況下
設(shè)置中斷優(yōu)先級組 0: 0個搶占優(yōu)先級 8個子優(yōu)先級
1: 2個搶占優(yōu)先級 4個子優(yōu)先級
2: 4個搶占優(yōu)先級 2個子優(yōu)先級
3: 8個搶占優(yōu)先級 0個子優(yōu)先級
只用高4位的情況下 0: 0個搶占優(yōu)先級 16個子優(yōu)先級
1: 2個搶占優(yōu)先級 8個子優(yōu)先級
2: 4個搶占優(yōu)先級 4個子優(yōu)先級
3: 8個搶占優(yōu)先級 2個子優(yōu)先級
4: 16個搶占優(yōu)先級 0個子優(yōu)先級
因為用的是高位 所以設(shè)置優(yōu)先級分組時,需要用 優(yōu)先級分組 = 0x07 - 序號
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的cortex M内核优先级设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于单片机的简单的任务调度器
- 下一篇: 简单的FIFO