有一個結(jié)構(gòu)體用于描述隊(duì)列,叫做 Queue_t,這個結(jié)構(gòu)體在文件 queue.c 中定義。
3、隊(duì)列創(chuàng)建
在使用隊(duì)列之前必須先創(chuàng)建隊(duì)列,有兩種創(chuàng)建隊(duì)列的方法,一種是靜態(tài)的,使用函數(shù)xQueueCreateStatic();另一個是動態(tài)的,使用函數(shù)
xQueueCreate()。這兩個函數(shù)本質(zhì)上都是宏,真正完成隊(duì)列創(chuàng)建的函數(shù)是 xQueueGenericCreate()和
xQueueGenericCreateStatic(),這兩個函數(shù)在文件 queue.c 中定義。
函數(shù) prvInitialiseNewQueue() 用于隊(duì)列的初始化,此函數(shù)在文件 queue.c 中定義。
函數(shù) prvInitialiseNewQueue()中調(diào)用了函數(shù) xQueueGenericReset()來復(fù)位隊(duì)列。
比如我們創(chuàng)建一個有 4 個隊(duì)列項(xiàng),每個隊(duì)列項(xiàng)長度為 32 個字節(jié)的隊(duì)列 TestQueue,創(chuàng)建成功的隊(duì)列如圖所示:
在創(chuàng)建的時候需要指定此隊(duì)列的用途,也就是隊(duì)列類型,一共有六種類型:
queueQUEUE_TYPE_BASE 普通的消息隊(duì)列
queueQUEUE_TYPE_SET 隊(duì)列集
queueQUEUE_TYPE_MUTEX 互斥信號量
queueQUEUE_TYPE_COUNTING_SEMAPHORE 計數(shù)型信號量
queueQUEUE_TYPE_BINARY_SEMAPHORE 二值信號量
queueQUEUE_TYPE_RECURSIVE_MUTEX 遞歸互斥信號量
4、向隊(duì)列發(fā)送消息
FreeRTOS 提供了 8 個向隊(duì)列發(fā)送消息的 API 函數(shù):
5、隊(duì)列上鎖和解鎖
隊(duì)列的上鎖和解鎖是兩個 API 函數(shù):prvLockQueue()和 prvUnlockQueue()。
6、從隊(duì)列讀取消息
有入隊(duì)就有出隊(duì),出隊(duì)就是從隊(duì)列中獲取隊(duì)列項(xiàng)(消息),F(xiàn)reeRTOS 中出隊(duì)函數(shù)如表示:
具體的函數(shù)用法大家可以在用到的時候百度,這里就不詳細(xì)介紹了,大家知道有這些東西就行。其中最重要的是任務(wù)級和中斷級不一樣,在中斷處理函數(shù)中是由一套自己的
API 用的。
-
嵌入式
+關(guān)注
關(guān)注
5085文章
19138瀏覽量
305722 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62216 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10851
發(fā)布評論請先 登錄
相關(guān)推薦
評論