精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一種基于單片機實現的隊列功能模塊

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

QueueForMcu

基于單片機實現的隊列功能模塊,主要用于8位、16位、32位非運行RTOS的單片機應用,兼容大多數單片機平臺。

一、特性

動態創建隊列對象

動態設置隊列數據緩沖區

靜態指定隊列元素數據長度

采用值傳遞的方式保存隊列數據

二、快速使用

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

三、配置說明

目前QueueForMcu只有一個靜態配置項,具體如下:

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

四、數據結構

隊列的數據結構為 QUEUE_HandleTypeDef 用于保存隊列的狀態,源碼如下:

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

其中 QUEUE_DATA_T 為配置項中自定義的數據類型。

五、創建隊列

1、創建隊列緩存

由于我們采用值傳遞的方式保存隊列數據,因此我們在創建隊列前要手動創建一個隊列緩存區,用于存放隊列數據。

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

以上代碼即創建一個大小為 1024 的隊列緩存區。

2、創建隊列結構

接下來使用 QUEUE_HandleTypeDef 創建隊列結構,用于保存隊列的狀態:

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

3、初始化隊列

準備好隊列緩存和隊列結構后調用 Queue_Init 函數來創建隊列,該函數原型如下:

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

參數說明:

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

參考代碼:

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

六、壓入隊列

1、單數據壓入

將數據壓入隊列尾部使用 Queue_Push 函數,該函數原型如下:

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

參數說明:

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

返回值說明:

該函數會返回一個 QUEUE_StatusTypeDef 枚舉數據類型,返回值會根據隊列狀態返回以下幾個值:

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

參考代碼:

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

2、多數據壓入

若需要將多個數據(數組)壓入隊列可以使用 Queue_Push_Array 函數,原理上循環調用 Queue_Push 函數來實現的,函數原型如下:

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

參數說明:

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

當數組長度大于隊列剩余長度時,數組多余的數據將被忽略。

返回值說明:

該函數將返回實際被壓入到隊列中的數據長度。

當隊列中的剩余長度富余時,返回值將等于參數 len 的值。

當隊列中的剩余長度不足時,返回值為實際被壓入到隊列的數據長度。

七、彈出隊列

1、單數據彈出

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

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

參數說明:

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

返回值說明: 該函數會返回一個 QUEUE_StatusTypeDef 枚舉數據類型,返回值會根據隊列狀態返回以下幾個值:

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

參考代碼:

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

2、多數據彈出

若需要將多個數據彈出隊列可以使用 Queue_Pop_Array 函數,原理上循環調用 Queue_Pop 函數來實現的,需要注意的是,成功彈出的數據將從隊列中刪除,函數原型如下:

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

參數說明:

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

當需要彈出數據的長度大于隊列中的數據長度時,彈出數組多余的空間將不會被賦值。

返回值說明:

該函數將返回實際從隊列中彈出的數據長度。

當隊列中的數據長度足夠時,返回值將等于參數 len 的值。

當隊列中的數據長度不足時,返回值為實際從隊列中彈出的數據長度。

3、單數據復制

當需要從隊列頭部獲取數據,但又不希望數據從隊列中刪除時,可以使用 Queue_Peek 函數來實現,該函數的參數與返回值與 Queue_Pop 完全相同。

使用 Queue_Peek 和 Queue_Pop 函數的區別在于:

Queue_Pop 得到隊列中的數據后會刪除隊列中的數據。

Queue_Peek 得到隊列中的數據后會保留隊列中的數據。

4、多數據復制

當需要從隊列頭部獲取多個數據,但又不希望數據從隊列中刪除時,可以使用 Queue_Peek_Array 函數來實現,該函數的參數與返回值與 Queue_Pop_Array 完全相同。

使用 Queue_Peek_Array 和 Queue_Pop_Array 函數的區別在于:

Queue_Pop_Array 得到隊列中的數據后會刪除隊列中的數據。

Queue_Peek_Array 得到隊列中的數據后會保留隊列中的數據。

八、其他功能

1、清空隊列

當需要清空隊列數據時,無需彈出所有數據,只需要調用 Queue_Clear 即可快速清空指定隊列,在創建隊列時會調用此函數來初始化隊列,因此對于剛創建完成的隊列無需調用清空隊列函數。

函數原型:

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

參數說明:

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

2、獲取隊列數據數量

當需要獲取隊列中的數據長度時,調用 Queue_Count 函數,函數原型如下:

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

參數說明:

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

返回值說明:

該函數將返回隊列中的數據長度。

返回值范圍在0到創建隊列時的長度之間。

License

Copyright 2020 QueueForMcu Released under the GPL-3.0 License.

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6032

    文章

    44514

    瀏覽量

    632971
  • mcu
    mcu
    +關注

    關注

    146

    文章

    16987

    瀏覽量

    350301
  • 開源
    +關注

    關注

    3

    文章

    3247

    瀏覽量

    42400
  • RTOS
    +關注

    關注

    21

    文章

    809

    瀏覽量

    119431
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40092

原文標題:開源的MCU隊列功能模塊,文末附代碼地址

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

收藏 人收藏

    評論

    相關推薦

    單片機典型案例開發(

    設計一種基于GPRS 和51 單片機的彩信報警系統。利用單片機技術、帶彩信協議GPRS 無線通信模塊、圖像捕獲和圖像壓縮編碼功能模塊
    發表于 04-05 15:45 ?1.4w次閱讀

    怎樣去使用基于單片機實現隊列功能模塊QueueForMcu呢

    基于單片機實現隊列功能模塊QueueForMcu有何特性?怎樣去使用基于單片機實現
    發表于 02-23 06:39

    一種單片機控制的多功能交流穩壓電源

    一種單片機控制的多功能交流穩壓電源 摘要:提出一種單片機控制的多功能交流穩壓電
    發表于 07-10 11:16 ?849次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>單片機</b>控制的多<b class='flag-5'>功能</b>交流穩壓電源

    一種彩信報警系統方案

    設計一種基于GPRS 和51 單片機的彩信報警系統。利用單片機技術、帶彩信協議GPRS 無線通信模塊、圖像捕獲和圖像壓縮編碼功能模塊
    發表于 02-23 15:18 ?47次下載
    <b class='flag-5'>一種</b>彩信報警系統方案

    一種單片機實現的多功能密碼鎖

    一種單片機實現的多功能密碼鎖,有需要的下來看看。
    發表于 02-17 16:46 ?24次下載

    一種基于單片機系統的DMA控制電路的模塊化設計方案

    一種基于單片機系統的DMA控制電路的模塊化設計方案
    發表于 01-14 22:41 ?19次下載

    一種簡單多功能單片機系統設計

    一種簡單多功能單片機系統設計
    發表于 01-14 22:41 ?10次下載

    基于51單片機功能模塊介紹

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

    單片機開發——應用消息隊列處理事件

    單片機開發——應用消息隊列處理事件
    發表于 11-13 13:36 ?11次下載
    <b class='flag-5'>單片機</b>開發——應用消息<b class='flag-5'>隊列</b>處理事件

    單片機功能模塊簡介

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

    單片機功能模塊簡介

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

    藍橋杯單片機功能模塊的使用

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

    QueueForMcu 基于單片機實現隊列功能模塊

    QueueForMcu基于單片機實現隊列功能模塊,主要用于8位、16位、32位非運行RTOS的單片機應用,兼容大多數
    發表于 12-31 19:35 ?1次下載
    QueueForMcu 基于<b class='flag-5'>單片機</b><b class='flag-5'>實現</b>的<b class='flag-5'>隊列</b><b class='flag-5'>功能模塊</b>

    單片機消息隊列實現原理和機制

    單片機開發過程中通常會用到“消息隊列”,實現的方法有多種。 本文給大家分享隊列
    的頭像 發表于 05-26 09:50 ?1479次閱讀
    <b class='flag-5'>單片機</b>消息<b class='flag-5'>隊列</b>的<b class='flag-5'>實現</b>原理和機制

    單片機裸機實現隊列功能的方案

    單片機裸機實現隊列功能的方案
    的頭像 發表于 10-17 14:34 ?548次閱讀