FREERTOS學習筆記,中斷管理三

2021-09-28 13:01:47 字數 2012 閱讀 4843

xqueuesendtofrontfromisr()

該函式相當於任務中的xqueuesendtofront()的中斷呼叫安全版。

xqueuesendtobackfromisr()

該函式相當於任務中的xqueuesendtoback()的中斷呼叫安全版。

xqueuereceivefromisr()

該函式相當於任務中的xqueuereceive()的中斷呼叫安全版。

xqueuesendtofrontfromisr() 和xqueuesendtobackfromisr()的函式原型如下所示:

basetype_t xqueuesendtofrontfromisr

( queuehandle_t xqueue,

void

*pvitemtoqueue

basetype_t *pxhigherprioritytaskwoken

);

basetype_t xqueuesendtobackfromisr

( queuehandle_t xqueue,

void

*pvitemtoqueue

basetype_t *pxhigherprioritytaskwoken

);

引數:

xqueue:佇列的控制代碼

pvitemtoqueue:放入佇列的資料

pxhigherprioritytaskwoken:當將資料放入到佇列後使得某個高優先順序任務進入就緒態,則該值會被置為pdtrue,以便於決定是否呼叫任務排程。

返回值:pdpass:成功,errqueue_full:佇列已滿

雖然用佇列傳遞資料比較方便,例如uart接收的資料採用佇列方式傳遞出去,但是我們並不推薦這種方法,更好的方式是採用dma的方式,或直接將資料放入到乙個陣列中。直到檢測到空閒中斷。然後採用佇列方式將資料傳給任務會更高效。

當中斷優先順序與任務優先順序混合在一起時,中斷永遠會搶占任務。無論任務優先順序有多高。若系統支援中斷巢狀,則freertosconfig.h中至少定義(configmax_syscall_interrupt_priority

configmax_api_call_interrupt_priority)configkernel_interrupt_priority其中之一,或全有定義。

configmax_syscall_interrupt_priority 或 configmax_api_call_interrupt_priority

設定了可以呼叫中斷安全介面函式的最高中斷優先順序。

configkernel_interrupt_priority

設定心跳(tick interrupt即時間片中斷)中斷優先順序,必須設定為硬體中斷優先順序中最低的,這樣可以方便其他硬體中斷打斷它。如果系統沒有使用configmax_syscall_interrupt_priority,則所有呼叫了中斷安全介面函式的中斷優先順序均為configkernel_interrupt_priority。

數字優先順序:硬體中設定,設定為多少,則優先順序為多少。(configkernel_interrupt_priority即為數字優先順序)

邏輯優先順序:邏輯優先順序越高,中斷優先順序越高,中斷邏輯優先順序與數字優先順序相關,有的數字優先順序設定越高,則邏輯優先順序越高,有的則完全相反

關於中斷巢狀如下例所示:

處理器有七種不同中斷優先順序,數字越大,優先順序越高。configkernel_interrupt_priority設定為1,configmax_syscall_interrupt_priority設定為3,如圖:

如圖,只有優先順序低於或等於優先順序3的中斷可以呼叫中斷api介面函式。

FreeRTOS中斷管理

異常與中斷的基本概念 異常是導致處理器脫離正常執行轉向執行特殊 的任何事件,如果不及時進行處理,輕則系統出錯,重則會導致系統毀滅性癱瘓。所以正確地處理異常,避免錯誤的發生是提高軟體魯棒性 穩定性 非常重要的一環,對於實時系統更是如此。異常是指任何打斷處理器正常執行,並且迫使處理器進入乙個由有特權的特...

FreeRTOS中斷測試

configmax syscall interrupt priority 高於此優先順序的中斷,不能被禁止 ifdef nvic prio bits define configprio bits nvic prio bits else define configprio bits 4 endif d...

FreeRTOS 中斷管理

1.只有以 fromisr 或 from isr 結束的api函式或巨集才可以在中斷服務函式中使用。2.除互斥訊號量外,所有型別的訊號量都可以呼叫 xsemaphoretake 來獲取訊號量,但 xsemaphoretake 不能用在中斷服務函式中。3.計數訊號量的典型用法 事件計數 資源管理 4....