0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 2023-08-14 11:09 ? 次閱讀

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ì)列對象

動(dòng)態(tài)設(shè)置隊(duì)列數(shù)據(jù)緩沖區(qū)

靜態(tài)指定隊(duì)列元素?cái)?shù)據(jù)長度

采用值傳遞的方式保存隊(duì)列數(shù)據(jù)

二、快速使用

bf38b53e-38e6-11ee-9e74-dac502259ad0.png

三、配置說明

目前QueueForMcu只有一個(gè)靜態(tài)配置項(xiàng),具體如下:

在文件 queue.h 中有一個(gè)宏定義 QUEUE_DATA_T 用于指定隊(duì)列元素的數(shù)據(jù)長度,默認(rèn)是 unsigned char ,可以根據(jù)需要更改為其他數(shù)據(jù)類型。

四、數(shù)據(jù)結(jié)構(gòu)

隊(duì)列的數(shù)據(jù)結(jié)構(gòu)為 QUEUE_HandleTypeDef 用于保存隊(duì)列的狀態(tài),源碼如下:

bf4909a2-38e6-11ee-9e74-dac502259ad0.png

其中 QUEUE_DATA_T 為配置項(xiàng)中自定義的數(shù)據(jù)類型。

五、創(chuàng)建隊(duì)列

1、創(chuàng)建隊(duì)列緩存

由于我們采用值傳遞的方式保存隊(duì)列數(shù)據(jù),因此我們在創(chuàng)建隊(duì)列前要手動(dòng)創(chuàng)建一個(gè)隊(duì)列緩存區(qū),用于存放隊(duì)列數(shù)據(jù)。

bf5560d0-38e6-11ee-9e74-dac502259ad0.png ????

以上代碼即創(chuàng)建一個(gè)大小為 1024 的隊(duì)列緩存區(qū)。

2、創(chuàng)建隊(duì)列結(jié)構(gòu)

接下來使用 QUEUE_HandleTypeDef 創(chuàng)建隊(duì)列結(jié)構(gòu),用于保存隊(duì)列的狀態(tài):

bf694cbc-38e6-11ee-9e74-dac502259ad0.png

3、初始化隊(duì)列

準(zhǔn)備好隊(duì)列緩存和隊(duì)列結(jié)構(gòu)后調(diào)用 Queue_Init 函數(shù)來創(chuàng)建隊(duì)列,該函數(shù)原型如下:

bf7e8f1e-38e6-11ee-9e74-dac502259ad0.png ????

參數(shù)說明:

bf8f49ee-38e6-11ee-9e74-dac502259ad0.png

參考代碼:

bfa91842-38e6-11ee-9e74-dac502259ad0.png

六、壓入隊(duì)列

1、單數(shù)據(jù)壓入

將數(shù)據(jù)壓入隊(duì)列尾部使用 Queue_Push 函數(shù),該函數(shù)原型如下:

bfb84678-38e6-11ee-9e74-dac502259ad0.png ????

參數(shù)說明:

bfc41ab6-38e6-11ee-9e74-dac502259ad0.png

返回值說明:

該函數(shù)會(huì)返回一個(gè) QUEUE_StatusTypeDef 枚舉數(shù)據(jù)類型,返回值會(huì)根據(jù)隊(duì)列狀態(tài)返回以下幾個(gè)值:

bfd74a50-38e6-11ee-9e74-dac502259ad0.png

參考代碼:

bfe5e1c8-38e6-11ee-9e74-dac502259ad0.png

2、多數(shù)據(jù)壓入

若需要將多個(gè)數(shù)據(jù)(數(shù)組)壓入隊(duì)列可以使用 Queue_Push_Array 函數(shù),原理上循環(huán)調(diào)用 Queue_Push 函數(shù)來實(shí)現(xiàn)的,函數(shù)原型如下:

bff1c1aa-38e6-11ee-9e74-dac502259ad0.png

參數(shù)說明:

c0083818-38e6-11ee-9e74-dac502259ad0.png

當(dāng)數(shù)組長度大于隊(duì)列剩余長度時(shí),數(shù)組多余的數(shù)據(jù)將被忽略。

返回值說明:

該函數(shù)將返回實(shí)際被壓入到隊(duì)列中的數(shù)據(jù)長度。

當(dāng)隊(duì)列中的剩余長度富余時(shí),返回值將等于參數(shù) len 的值。

當(dāng)隊(duì)列中的剩余長度不足時(shí),返回值為實(shí)際被壓入到隊(duì)列的數(shù)據(jù)長度。

七、彈出隊(duì)列

1、單數(shù)據(jù)彈出

將隊(duì)列頭部數(shù)據(jù)彈出隊(duì)列使用 Queue_Pop 函數(shù),需要注意的是,彈出的數(shù)據(jù)將從隊(duì)列中刪除,該函數(shù)原型如下:

c0161442-38e6-11ee-9e74-dac502259ad0.png ????

參數(shù)說明:

c02ba104-38e6-11ee-9e74-dac502259ad0.png

返回值說明: 該函數(shù)會(huì)返回一個(gè) QUEUE_StatusTypeDef 枚舉數(shù)據(jù)類型,返回值會(huì)根據(jù)隊(duì)列狀態(tài)返回以下幾個(gè)值:

c046afbc-38e6-11ee-9e74-dac502259ad0.png

參考代碼:

c0568068-38e6-11ee-9e74-dac502259ad0.png

2、多數(shù)據(jù)彈出

若需要將多個(gè)數(shù)據(jù)彈出隊(duì)列可以使用 Queue_Pop_Array 函數(shù),原理上循環(huán)調(diào)用 Queue_Pop 函數(shù)來實(shí)現(xiàn)的,需要注意的是,成功彈出的數(shù)據(jù)將從隊(duì)列中刪除,函數(shù)原型如下:

c062c580-38e6-11ee-9e74-dac502259ad0.png

參數(shù)說明:

c07be02e-38e6-11ee-9e74-dac502259ad0.png

當(dāng)需要彈出數(shù)據(jù)的長度大于隊(duì)列中的數(shù)據(jù)長度時(shí),彈出數(shù)組多余的空間將不會(huì)被賦值。

返回值說明:

該函數(shù)將返回實(shí)際從隊(duì)列中彈出的數(shù)據(jù)長度。

當(dāng)隊(duì)列中的數(shù)據(jù)長度足夠時(shí),返回值將等于參數(shù) len 的值。

當(dāng)隊(duì)列中的數(shù)據(jù)長度不足時(shí),返回值為實(shí)際從隊(duì)列中彈出的數(shù)據(jù)長度。

3、單數(shù)據(jù)復(fù)制

當(dāng)需要從隊(duì)列頭部獲取數(shù)據(jù),但又不希望數(shù)據(jù)從隊(duì)列中刪除時(shí),可以使用 Queue_Peek 函數(shù)來實(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ù)來實(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í),無需彈出所有數(shù)據(jù),只需要調(diào)用 Queue_Clear 即可快速清空指定隊(duì)列,在創(chuàng)建隊(duì)列時(shí)會(huì)調(diào)用此函數(shù)來初始化隊(duì)列,因此對于剛創(chuàng)建完成的隊(duì)列無需調(diào)用清空隊(duì)列函數(shù)。

函數(shù)原型:

c096477a-38e6-11ee-9e74-dac502259ad0.png ????

參數(shù)說明:

c0a21c44-38e6-11ee-9e74-dac502259ad0.png

2、獲取隊(duì)列數(shù)據(jù)數(shù)量

當(dāng)需要獲取隊(duì)列中的數(shù)據(jù)長度時(shí),調(diào)用 Queue_Count 函數(shù),函數(shù)原型如下:

c0b9e8c4-38e6-11ee-9e74-dac502259ad0.png ????

參數(shù)說明:

c0cb6306-38e6-11ee-9e74-dac502259ad0.png

返回值說明:

該函數(shù)將返回隊(duì)列中的數(shù)據(jù)長度。

返回值范圍在0到創(chuàng)建隊(duì)列時(shí)的長度之間。

License

Copyright 2020 QueueForMcu Released under the GPL-3.0 License.

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635285
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17148

    瀏覽量

    351195
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3348

    瀏覽量

    42499
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    813

    瀏覽量

    119636
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40130

原文標(biāo)題:開源的MCU隊(duì)列功能模塊,文末附代碼地址

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)典型案例開發(fā)(

    設(shè)計(jì)一種基于GPRS 和51 單片機(jī)的彩信報(bào)警系統(tǒng)。利用單片機(jī)技術(shù)、帶彩信協(xié)議GPRS 無線通信模塊、圖像捕獲和圖像壓縮編碼功能模塊,
    發(fā)表于 04-05 15:45 ?1.4w次閱讀

    怎樣去使用基于單片機(jī)實(shí)現(xiàn)隊(duì)列功能模塊QueueForMcu呢

    基于單片機(jī)實(shí)現(xiàn)隊(duì)列功能模塊QueueForMcu有何特性?怎樣去使用基于單片機(jī)實(shí)現(xiàn)
    發(fā)表于 02-23 06:39

    一種單片機(jī)控制的多功能交流穩(wěn)壓電源

    一種單片機(jī)控制的多功能交流穩(wěn)壓電源 摘要:提出一種單片機(jī)控制的多功能交流穩(wěn)壓電
    發(fā)表于 07-10 11:16 ?858次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>單片機(jī)</b>控制的多<b class='flag-5'>功能</b>交流穩(wěn)壓電源

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

    設(shè)計(jì)一種基于GPRS 和51 單片機(jī)的彩信報(bào)警系統(tǒng)。利用單片機(jī)技術(shù)、帶彩信協(xié)議GPRS 無線通信模塊、圖像捕獲和圖像壓縮編碼功能模塊,
    發(fā)表于 02-23 15:18 ?47次下載
    <b class='flag-5'>一種</b>彩信報(bào)警系統(tǒng)方案

    一種單片機(jī)實(shí)現(xiàn)的多功能密碼鎖

    一種單片機(jī)實(shí)現(xiàn)的多功能密碼鎖,有需要的下來看看。
    發(fā)表于 02-17 16:46 ?24次下載

    一種基于單片機(jī)系統(tǒng)的DMA控制電路的模塊化設(shè)計(jì)方案

    一種基于單片機(jī)系統(tǒng)的DMA控制電路的模塊化設(shè)計(jì)方案
    發(fā)表于 01-14 22:41 ?19次下載

    一種簡單多功能單片機(jī)系統(tǒng)設(shè)計(jì)

    一種簡單多功能單片機(jī)系統(tǒng)設(shè)計(jì)
    發(fā)表于 01-14 22:41 ?10次下載

    基于51單片機(jī)功能模塊介紹

    MCS-51系列單片機(jī)的所有產(chǎn)品般都具有并行口,定時(shí)器和串行口等功能模塊。這章主要介紹這些基本的功能模塊使用方法。典型的MCS-51
    發(fā)表于 09-25 15:06 ?31次下載
    基于51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>功能模塊</b>介紹

    單片機(jī)開發(fā)——應(yīng)用消息隊(duì)列處理事件

    單片機(jī)開發(fā)——應(yīng)用消息隊(duì)列處理事件
    發(fā)表于 11-13 13:36 ?11次下載
    <b class='flag-5'>單片機(jī)</b>開發(fā)——應(yīng)用消息<b class='flag-5'>隊(duì)列</b>處理事件

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

    通過自己的學(xué)習(xí),對單片機(jī)功能模塊進(jìn)行簡單介紹。1.單片機(jī)芯片配置IAP15F2K61S2單片機(jī)2.顯示模塊配置8路LED輸出L1~L8配置8
    發(fā)表于 11-13 15:06 ?1次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>功能模塊</b>簡介

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

    通過自己的學(xué)習(xí),對單片機(jī)功能模塊進(jìn)行簡單介紹。1.單片機(jī)芯片配置IAP15F2K61S2單片機(jī)2.顯示模塊配置8路LED輸出L1~L8配置8
    發(fā)表于 11-14 16:36 ?7次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>功能模塊</b>簡介

    藍(lán)橋杯單片機(jī)功能模塊的使用

    、onewire和iic三驅(qū)動(dòng)程序的使用,還有超聲波測距模塊實(shí)現(xiàn)。提示:以下是本篇文章正文內(nèi)容,下面案例可供參考、DS1302ds1302.c/* 程序說明: DS1302驅(qū)動(dòng)
    發(fā)表于 11-26 15:06 ?9次下載
    藍(lán)橋杯<b class='flag-5'>單片機(jī)</b>各<b class='flag-5'>功能模塊</b>的使用

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

    QueueForMcu基于單片機(jī)實(shí)現(xiàn)隊(duì)列功能模塊,主要用于8位、16位、32位非運(yùn)行RTOS的單片機(jī)應(yīng)用,兼容大多數(shù)
    發(fā)表于 12-31 19:35 ?1次下載
    QueueForMcu 基于<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b>的<b class='flag-5'>隊(duì)列</b><b class='flag-5'>功能模塊</b>

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

    單片機(jī)開發(fā)過程中通常會(huì)用到“消息隊(duì)列”,實(shí)現(xiàn)的方法有多種。 本文給大家分享隊(duì)列
    的頭像 發(fā)表于 05-26 09:50 ?1565次閱讀
    <b class='flag-5'>單片機(jī)</b>消息<b class='flag-5'>隊(duì)列</b>的<b class='flag-5'>實(shí)現(xiàn)</b>原理和機(jī)制

    單片機(jī)裸機(jī)實(shí)現(xiàn)隊(duì)列功能的方案

    單片機(jī)裸機(jī)實(shí)現(xiàn)隊(duì)列功能的方案
    的頭像 發(fā)表于 10-17 14:34 ?587次閱讀