1 一种基于单片机实现的队列功能模块-德赢Vwin官网 网
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.

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634590
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17123

    浏览量

    350973
  • 开源
    +关注

    关注

    3

    文章

    3309

    浏览量

    42471
  • RTOS
    +关注

    关注

    22

    文章

    811

    浏览量

    119588
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    40121

原文标题:开源的MCU队列功能模块,文末附代码地址

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机典型案例开发(

    设计一种基于GPRS 和51 单片机的彩信报警系统。利用单片机技术、带彩信协议GPRS 无线通信模块、图像捕获和图像压缩编码功能模块
    发表于 04-05 15:45 1.4w次阅读

    怎样去使用基于单片机实现队列功能模块QueueForMcu呢

    基于单片机实现队列功能模块QueueForMcu有何特性?怎样去使用基于单片机实现
    发表于 02-23 06:39

    一种单片机控制的多功能交流稳压电源

    一种单片机控制的多功能交流稳压电源 摘要:提出一种单片机控制的多功能交流稳压电
    发表于 07-10 11:16 855次阅读
    <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 1547次阅读
    <b class='flag-5'>单片机</b>消息<b class='flag-5'>队列</b>的<b class='flag-5'>实现</b>原理和机制

    单片机裸机实现队列功能的方案

    单片机裸机实现队列功能的方案
    的头像 发表于 10-17 14:34 569次阅读