佇列建立xqueuecreate,此巨集最終呼叫函式xqueuegenericcreate()
queuehandle_t xqueuecreate( ubasetype_t uxqueuelength,//要建立的佇列的佇列長度,這裡是佇列的專案數
ubasetype_t uxitemsize )//佇列中每個專案(訊息)的長度,單位為位元組
向佇列傳送訊息xqueuesend xqueuesendtoback xqueuesendtofront
這三個函式最後呼叫的是同乙個函式xqueuegenericsend()
basetype_t xqueuesend(queuehandle_t xqueue, //佇列控制代碼
const void* pvitemtoqueue,//指向要傳送的訊息
ticktype_t xtickstowait); //阻塞時間.值為0佇列滿時立即返回
//值為portmax_delay 死等,但是巨集 //include_vtasksuspend必須為1
//在freertosconfig.h檔案130行
返回值:
pdpass:向佇列傳送訊息成功
errqueue_full 佇列已滿了,訊息傳送失敗
從佇列讀取訊息xqueuereceive(),讀取成功後會把佇列中的這條資料刪除
basetype_t xqueuereceive(queuehandle_t xqueue //佇列控制代碼
void* pvbuffer //儲存資料的緩衝區
ticktype_t xtickstowait); //阻塞時間
返回值:
pctrue: 從佇列中讀取資料成功
pdfalse: 從佇列中讀取資料失敗
從佇列讀取訊息xqueuepeek(),讀取成功後不會將訊息刪除引數和xqueuereceive相同
FreeRTOS佇列使用
佇列是任務間通訊的主要形式。常被用於任務與任務 中斷與任務之間的訊息傳遞,通常是fifo的形式。當乙個任務讀取空佇列時,這個任務將進入阻塞態 不消耗cpu,cpu會去執行其他任務 直到佇列不為空或者阻塞時長超過設定的阻塞時間,將進入就緒態。當乙個任務向滿佇列寫時,這個任務會進入阻塞態 不消耗cpu,...
(十六)FreeRTOS佇列
圖1 1 讀寫佇列 圖1 1所示的佇列中,最多能儲存5個專案,並且假設佇列永遠不會滿。任務a使用api函式xqueuesendtoback 向佇列傳送資料,每次傳送乙個資料,新入隊的資料置於上一次入隊資料的後面。任務b使用api函式xqueuereceive 將資料從佇列取出,先入隊的資料先出隊。通...
FreeRTOS任務通知API函式
要使用任務通知,就要將巨集configuse task notifications置1 在freertos.h檔案768行 傳送任務通知xtasknotify,此函式傳送任務通知的時候帶有通知值 basetypep t xtasknotify taskhandle t xtasktonotify,任...