FreeRTOS中佇列複寫的問題

2021-10-05 12:09:35 字數 1012 閱讀 2725

freertos應該是所有嵌入式人員都經常使用的操作os了,最近博主在使用的時候遇到了乙個問題,具體情況如下:

在hal庫中,其封裝好了佇列queue的複寫函式xqueueoverwrite( xqueue, pvitemtoqueue )

那麼其巨集定義如下#define xqueueoverwrite( xqueue,pvitemtoqueue ) xqueuegenericsend( ( xqueue ), ( pvitemtoqueue ), 0,queueoverwrite )

可以看到最後乙個引數為queueoverwrite,說明呼叫該函式是為了佇列的複寫功能現在博主來分析下這個問題:初始化乙個佇列,item一定要大於1    

osmessageqdef(usbsendqueue, 256, uint8_t);

usbsendqueuehandle =osmessagecreate(osmessageq(usbsendqueue), null);

呼叫該方法,xqueueoverwrite(usbqueue,g_usbtxdbuffer);//復寫入隊會死在其函式的斷言中:

configassert( !( ( xcopyposition ==queueoverwrite ) && ( pxqueue->uxlength != 1 ) ) );

分析該斷言可發現其是乙個迴圈函式:#define configassert( x ) if ((x) == 0)分析下該斷言的使用,也就是說只有當隊列為item為1的時候,才能使用該複寫的方法。很扯是嗎。。但是的確是這個問題。查詢資料為freertos原始碼詳解與應用開發

STL 中佇列的使用 queue

基本操作 push x 將x壓入佇列的末端 pop 彈出佇列的第乙個元素 隊頂元素 注意此函式並不返回任何值 front 返回第乙個元素 隊頂元素 back 返回最後被壓入的元素 隊尾元素 empty 當隊列為空時,返回true size 返回佇列的長度 使用方法 標頭檔案 include 宣告方法...

STL中佇列的相關操作

基本操作 push x 將x壓入佇列的末端 pop 彈出佇列的第乙個元素 隊頂元素 注意此函式並不返回任何值 front 返回第乙個元素 隊頂元素 back 返回最後被壓入的元素 隊尾元素 empty 當隊列為空時,返回true size 返回佇列的長度 include include using ...

C 中佇列的實現原理

佇列介紹 佇列是一種先進先出的資料結構,它是一種線性表,允許在表的尾部插入元素,在其首部刪除元素。佇列是一種非常常見和重要的資料結構,排隊就是佇列在生活中的示例。佇列有兩種實現方式,一種是用鍊錶實現佇列,還有一種是用順序表來實現佇列。自定義一種鍊錶方式實現佇列 class selfqueue els...