1. 程式人生 > >FreeRTOS - 中斷使用註意

FreeRTOS - 中斷使用註意

interrupt 運行 kernel 大於等於 註意點 正常 pri 數值 用戶

註意點:
1:首先要將中斷的嵌套全部設置為搶占優先級。
2:將freertos系統內核中斷(configKERNEL_INTERRUPT_PRIORITY)的優先級設置成最低。
3:將freertos的最大系統調用中斷優先級(configMAX_SYSCALL_INTERRUPT_PRIORITY)設置為合適的優先級,比如11。
4:如果有用戶中斷函數調用到freertos提供的系統函數,一定要使用帶FromISR的freertos提供的系統函數,並且這個用戶中斷的優先級一定要在configKERNEL_INTERRUPT_PRIORITY和configMAX_SYSCALL_INTERRUPT_PRIORITY的優先級之間,比如FREERTOS中的優先級數值設定的參數是configMAX_SYSCALL_INTERUPT_PRORITY。默認值是5,所以要想在中斷中使用操作系統函數需要將中斷的優先級設置的大於等於5

(原因分析:

1、執行帶FromISR的FreeRTOS提供的系統函數會進入臨界區,屏蔽了任務的切換,否則有高優先級的任務調用了這個系統函數,但這個系統函數的使用資格被用戶中斷函數霸占(低優先級),高優先級任務因為得不到操作這個系統函數的資格而被阻塞,就好像高優先級任務不能打斷低優先級任務

2、如果用戶中斷的優先級高於configMAX_SYSCALL_INTERRUPT_PRIORITY,還調用系統函數,由於系統被此用戶中斷打斷而不能正常運行,會導致程序出錯(猜測)


5:其他沒有調用到freertos提供的系統函數的中斷的優先級沒有特別要求。

FreeRTOS - 中斷使用註意