QueueForMcu
基于單片機(jī)實(shí)現(xiàn)的隊(duì)列功能模塊,主要用于8位、16位、32位非運(yùn)行RTOS的單片機(jī)應(yīng)用,兼容大多數(shù)單片機(jī)平臺(tái)。
一、特性
動(dòng)態(tài)創(chuàng)建隊(duì)列對(duì)象
動(dòng)態(tài)設(shè)置隊(duì)列數(shù)據(jù)緩沖區(qū)
靜態(tài)指定隊(duì)列元素?cái)?shù)據(jù)長(zhǎng)度
采用值傳遞的方式保存隊(duì)列數(shù)據(jù)
二、快速使用
三、配置說(shuō)明
目前QueueForMcu只有一個(gè)靜態(tài)配置項(xiàng),具體如下:
在文件 queue.h 中有一個(gè)宏定義 QUEUE_DATA_T 用于指定隊(duì)列元素的數(shù)據(jù)長(zhǎng)度,默認(rèn)是 unsigned char ,可以根據(jù)需要更改為其他數(shù)據(jù)類型。
四、數(shù)據(jù)結(jié)構(gòu)
隊(duì)列的數(shù)據(jù)結(jié)構(gòu)為 QUEUE_HandleTypeDef 用于保存隊(duì)列的狀態(tài),源碼如下:
其中 QUEUE_DATA_T 為配置項(xiàng)中自定義的數(shù)據(jù)類型。
五、創(chuàng)建隊(duì)列
1、創(chuàng)建隊(duì)列緩存
由于我們采用值傳遞的方式保存隊(duì)列數(shù)據(jù),因此我們?cè)趧?chuàng)建隊(duì)列前要手動(dòng)創(chuàng)建一個(gè)隊(duì)列緩存區(qū),用于存放隊(duì)列數(shù)據(jù)。 ????
以上代碼即創(chuàng)建一個(gè)大小為 1024 的隊(duì)列緩存區(qū)。
2、創(chuàng)建隊(duì)列結(jié)構(gòu)
接下來(lái)使用 QUEUE_HandleTypeDef 創(chuàng)建隊(duì)列結(jié)構(gòu),用于保存隊(duì)列的狀態(tài):
3、初始化隊(duì)列
準(zhǔn)備好隊(duì)列緩存和隊(duì)列結(jié)構(gòu)后調(diào)用 Queue_Init 函數(shù)來(lái)創(chuàng)建隊(duì)列,該函數(shù)原型如下: ????
參數(shù)說(shuō)明:
參考代碼:
六、壓入隊(duì)列
1、單數(shù)據(jù)壓入
將數(shù)據(jù)壓入隊(duì)列尾部使用 Queue_Push 函數(shù),該函數(shù)原型如下: ????
參數(shù)說(shuō)明:
返回值說(shuō)明:
該函數(shù)會(huì)返回一個(gè) QUEUE_StatusTypeDef 枚舉數(shù)據(jù)類型,返回值會(huì)根據(jù)隊(duì)列狀態(tài)返回以下幾個(gè)值:
參考代碼:
2、多數(shù)據(jù)壓入
若需要將多個(gè)數(shù)據(jù)(數(shù)組)壓入隊(duì)列可以使用 Queue_Push_Array 函數(shù),原理上循環(huán)調(diào)用 Queue_Push 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:
參數(shù)說(shuō)明:
當(dāng)數(shù)組長(zhǎng)度大于隊(duì)列剩余長(zhǎng)度時(shí),數(shù)組多余的數(shù)據(jù)將被忽略。
返回值說(shuō)明:
該函數(shù)將返回實(shí)際被壓入到隊(duì)列中的數(shù)據(jù)長(zhǎng)度。
當(dāng)隊(duì)列中的剩余長(zhǎng)度富余時(shí),返回值將等于參數(shù) len 的值。
當(dāng)隊(duì)列中的剩余長(zhǎng)度不足時(shí),返回值為實(shí)際被壓入到隊(duì)列的數(shù)據(jù)長(zhǎng)度。
七、彈出隊(duì)列
1、單數(shù)據(jù)彈出
將隊(duì)列頭部數(shù)據(jù)彈出隊(duì)列使用 Queue_Pop 函數(shù),需要注意的是,彈出的數(shù)據(jù)將從隊(duì)列中刪除,該函數(shù)原型如下: ????
參數(shù)說(shuō)明:
返回值說(shuō)明: 該函數(shù)會(huì)返回一個(gè) QUEUE_StatusTypeDef 枚舉數(shù)據(jù)類型,返回值會(huì)根據(jù)隊(duì)列狀態(tài)返回以下幾個(gè)值:
參考代碼:
2、多數(shù)據(jù)彈出
若需要將多個(gè)數(shù)據(jù)彈出隊(duì)列可以使用 Queue_Pop_Array 函數(shù),原理上循環(huán)調(diào)用 Queue_Pop 函數(shù)來(lái)實(shí)現(xiàn)的,需要注意的是,成功彈出的數(shù)據(jù)將從隊(duì)列中刪除,函數(shù)原型如下:
參數(shù)說(shuō)明:
當(dāng)需要彈出數(shù)據(jù)的長(zhǎng)度大于隊(duì)列中的數(shù)據(jù)長(zhǎng)度時(shí),彈出數(shù)組多余的空間將不會(huì)被賦值。
返回值說(shuō)明:
該函數(shù)將返回實(shí)際從隊(duì)列中彈出的數(shù)據(jù)長(zhǎng)度。
當(dāng)隊(duì)列中的數(shù)據(jù)長(zhǎng)度足夠時(shí),返回值將等于參數(shù) len 的值。
當(dāng)隊(duì)列中的數(shù)據(jù)長(zhǎng)度不足時(shí),返回值為實(shí)際從隊(duì)列中彈出的數(shù)據(jù)長(zhǎng)度。
3、單數(shù)據(jù)復(fù)制
當(dāng)需要從隊(duì)列頭部獲取數(shù)據(jù),但又不希望數(shù)據(jù)從隊(duì)列中刪除時(shí),可以使用 Queue_Peek 函數(shù)來(lái)實(shí)現(xiàn),該函數(shù)的參數(shù)與返回值與 Queue_Pop 完全相同。
使用 Queue_Peek 和 Queue_Pop 函數(shù)的區(qū)別在于:
Queue_Pop 得到隊(duì)列中的數(shù)據(jù)后會(huì)刪除隊(duì)列中的數(shù)據(jù)。
Queue_Peek 得到隊(duì)列中的數(shù)據(jù)后會(huì)保留隊(duì)列中的數(shù)據(jù)。
4、多數(shù)據(jù)復(fù)制
當(dāng)需要從隊(duì)列頭部獲取多個(gè)數(shù)據(jù),但又不希望數(shù)據(jù)從隊(duì)列中刪除時(shí),可以使用 Queue_Peek_Array 函數(shù)來(lái)實(shí)現(xiàn),該函數(shù)的參數(shù)與返回值與 Queue_Pop_Array 完全相同。
使用 Queue_Peek_Array 和 Queue_Pop_Array 函數(shù)的區(qū)別在于:
Queue_Pop_Array 得到隊(duì)列中的數(shù)據(jù)后會(huì)刪除隊(duì)列中的數(shù)據(jù)。
Queue_Peek_Array 得到隊(duì)列中的數(shù)據(jù)后會(huì)保留隊(duì)列中的數(shù)據(jù)。
八、其他功能
1、清空隊(duì)列
當(dāng)需要清空隊(duì)列數(shù)據(jù)時(shí),無(wú)需彈出所有數(shù)據(jù),只需要調(diào)用 Queue_Clear 即可快速清空指定隊(duì)列,在創(chuàng)建隊(duì)列時(shí)會(huì)調(diào)用此函數(shù)來(lái)初始化隊(duì)列,因此對(duì)于剛創(chuàng)建完成的隊(duì)列無(wú)需調(diào)用清空隊(duì)列函數(shù)。
函數(shù)原型: ????
參數(shù)說(shuō)明:
2、獲取隊(duì)列數(shù)據(jù)數(shù)量
當(dāng)需要獲取隊(duì)列中的數(shù)據(jù)長(zhǎng)度時(shí),調(diào)用 Queue_Count 函數(shù),函數(shù)原型如下: ????
參數(shù)說(shuō)明:
返回值說(shuō)明:
該函數(shù)將返回隊(duì)列中的數(shù)據(jù)長(zhǎng)度。
返回值范圍在0到創(chuàng)建隊(duì)列時(shí)的長(zhǎng)度之間。
License
Copyright 2020 QueueForMcu Released under the GPL-3.0 License.
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44992瀏覽量
650639 -
mcu
+關(guān)注
關(guān)注
146文章
17984瀏覽量
367172 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3690瀏覽量
43840 -
RTOS
+關(guān)注
關(guān)注
24文章
851瀏覽量
121190 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40756
原文標(biāo)題:開(kāi)源的MCU隊(duì)列功能模塊,文末附代碼地址
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
單片機(jī)典型案例開(kāi)發(fā)(一)
單片機(jī)功能模塊的相關(guān)資料推薦
怎樣去使用基于單片機(jī)實(shí)現(xiàn)的隊(duì)列功能模塊QueueForMcu呢
一種單片機(jī)控制的多功能交流穩(wěn)壓電源

一種彩信報(bào)警系統(tǒng)方案

一種由單片機(jī)實(shí)現(xiàn)的多功能密碼鎖
一種基于單片機(jī)系統(tǒng)的DMA控制電路的模塊化設(shè)計(jì)方案
一種簡(jiǎn)單多功能單片機(jī)系統(tǒng)設(shè)計(jì)
基于51單片機(jī)的功能模塊介紹

一種基于STM32單片機(jī)的視頻遙控小車的設(shè)計(jì)

單片機(jī)功能模塊簡(jiǎn)介

單片機(jī)功能模塊簡(jiǎn)介

QueueForMcu 基于單片機(jī)實(shí)現(xiàn)的隊(duì)列功能模塊

單片機(jī)消息隊(duì)列的實(shí)現(xiàn)原理和機(jī)制

評(píng)論