FreeRTOS 佇列常用API函式

2021-08-14 03:55:23 字數 1018 閱讀 5751

佇列建立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,任...