本篇文章記錄我學習FreeRTOS隊列創建的知識。主要分享隊列創建需要使用的初始化函數、隊列復位函數。
需要進一步了解FreeRTOS隊列的相關知識,讀者可以參考以下文章:
FreeRTOS學習——FreeRTOS隊列(上)_freertos 單元素隊列-CSDN博客
FreeRTOS學習——FreeR TOS隊列——隊列創建(中)-CSDN博客
一、隊列初始化函數
隊列初始化函數prvInitialiseNewQueue()用于隊列的初始化,此函數在文件queue.c中有定義,函數代碼如下:
(1)、隊列結構體中的成員變量pcHead指向隊列存儲區中首地址。
(2)、初始化隊列結構體中的成員變量uxQueueLength和uxItemSize,這兩個成員變量保存隊列的最大隊列項目和每個隊列項大小。
(3)、調用函數xQueueGenericReset()復位隊列。PS:發一句牢騷,繞來繞去的,函數調了一個又一個的。
二、隊列復位函數
隊列初始化函數 prvInitialiseNewQueue()中調用了函數xQueueGenericReset()來復位隊列,函數xQueueGenericReset()代碼如下:
(1)、初始化隊列中的相關成員變量。
(2)、根據參數xNewQueue確定要復位的隊列是否是新創建的隊列,如果不是的話還需要做其他的處理
(3)、初始化隊列中的列表xTasksWaitingToSend和 xTasksWaitingToReceive。至此,隊列創建成功,比如我們創建一個有4個隊列項,每個隊列項長度為32個字節的隊列TestQueue,創建成功的隊列如下: