基于STM32應用的FreeRTOS中斷設置
FreeRTOSConfig.h中定義了兩個(gè)宏,分別是:
本文引用地址:http://dyxdggzs.com/article/201611/316110.htm- configKERNEL_INTERRUPT_PRIORITY
- configMAX_SYSCALL_INTERRUPT_PRIORITY
- ?configKERNEL_INTERRUPT_PRIORITY用來(lái)設置RTOS內核自己的中斷優(yōu)先級。因為RTOS內核中斷不允許搶占用戶(hù)使用的中斷,因此這個(gè)宏一般定義為硬件最低優(yōu)先級。
- configMAX_SYSCALL_INTERRUPT_PRIORITY用來(lái)設置可以在中斷服務(wù)程序中安全調用FreeRTOS API函數的最高中斷優(yōu)先級。優(yōu)先級小于等于這個(gè)宏所代表的優(yōu)先級時(shí),程序可以在中斷服務(wù)程序中安全的調用FreeRTOS API函數;如果優(yōu)先級大于這個(gè)宏所代表的優(yōu)先級,表示FreeRTOS無(wú)法禁止這個(gè)中斷,在這個(gè)中斷服務(wù)程序中絕不可以調用任何API函數。
也就是說(shuō)?RTOS中斷嵌套方案將可用的中斷優(yōu)先級分成2組:會(huì )被RTOS臨界區覆蓋的和永遠不會(huì )被覆蓋的所以這些是一直被使能的。configMAX_SYSCALL_INTERRUPT_PRIORITY設置值是這兩組的邊界值。


如上圖所示,在STM32中使用FreeRTOS時(shí),系統默認:
//This is the raw value as per the Cortex-M3 NVIC. Values can be 255
(lowest) to 0 (1?) (highest).
#define configKERNEL_INTERRUPT_PRIORITY 255(0xFF也即是優(yōu)先級15)?
//!!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html.
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 191 (0xBF也即優(yōu)先級11)
故在中斷優(yōu)先級為0~10的中斷,均不會(huì )被內核延遲,并且可嵌套但不能調用API函數。在11~15之間的中斷可以調用以?FromISR結尾的API函數。
關(guān)鍵詞:
STM32FreeRTOS中斷設
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論