第三節:FreeRTOS 中斷測試實驗
阿新 • • 發佈:2018-10-31
目錄
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
portDISABLE_INTERRUPTS(); 關中斷 portENABLE_INTERRUPTS(); 開中斷
taskENTER_CRITICAL() 和 taskEXIT_CRITICAL()
taskENTER_CRITICAL_FROM_ISR() 和 taskEXIT_CRITICAL_FROM_ISR()
(1)首先了解FreeRTOSConfig.h中的巨集。
configKERNEL_INTERRUPT_PRIORITY
此巨集是定義核心中斷優先順序的,決定了可以有多少個優先順序。
configMAX_SYSCALL_INTERRUPT_PRIORITY
此巨集是定義系統中斷許可權的。高於此中斷優先順序的中斷,核心無法禁止.
舉個例子:STM32 設定為16個優先順序 ,0為最高,16為最低。配置為configKERNEL_INTERRUPT_PRIORITY=15,
configMAX_SYSCALL_INTERRUPT_PRIORITY=5.
則高級別的中斷0-4,不會被核心遮蔽。
(2)FreeRTOS 開關中斷
portDISABLE_INTERRUPTS(); 關中斷
portENABLE_INTERRUPTS(); 開中斷
低於configMAX_SYSCALL_INTERRUPT_PRIORITY=5 的中斷會被遮蔽。高於configMAX_SYSCALL_INTERRUPT_PRIORITY的中斷會繼續進行。
(3)臨界段保護
taskENTER_CRITICAL() 和 taskEXIT_CRITICAL()
任務級臨界保護程式碼,一個進入臨界段,一個退出臨界段。
taskENTER_CRITICAL_FROM_ISR() 和 taskEXIT_CRITICAL_FROM_ISR()
中斷級臨界保護程式碼,一個進入臨界段,一個退出臨界段。