十七、队列
创始人
2025-05-31 15:22:38
0

文章目录

  • 1、基本概念(队列实际上就是一个结构体,可以理解为就是一个数组)
  • 2、使用场景:任务间或任务与中断间传递数据
  • 3、使用队列的好处
    • (1)休眠唤醒
    • (2)提高CPU利用率
  • 4、队列的核心
  • 5、动态创建队列——xQueueCreate()
  • 6、队列删除函数—— vQueueDelete()
  • 7、读队列
    • (1)读队列流程示意图
    • (2)API函数——xQueueReceive()与xQueueReceiveFromISR()
  • 8、写队列
    • (1)写队列流程
    • (2)API函数
      • 1)向队尾写入数据
      • 2)向队头写入数据
  • 9、查询队列
  • 10、复位队列

1、基本概念(队列实际上就是一个结构体,可以理解为就是一个数组)

在这里插入图片描述

队列:即消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息。
即在任务或中断服务程序都可以对队列进行操作。

通过消息队列服务,任务或者中断服务例程可以将一条或多条消息放入队列中;同样一个或多个任务可以从消息队列中获得消息。

支持先进先出原则,也支持后进先出原则。

2、使用场景:任务间或任务与中断间传递数据

3、使用队列的好处

(1)休眠唤醒

任务进行休眠时会执行两步:改变状态和队列链表记录这个任务,具体如下所示:
在这里插入图片描述

(2)提高CPU利用率

即在使用队列后,拥有了休眠唤醒功能,不须像裸机程序一样不断地去查询是否有数据存在等,从而使CPU能够利用这段时间去做一些更加必要的事情。

4、队列的核心

关中断(来实现互斥)
环形缓存区(即一个数组,存放满了之后再从头开始存放,来保存数据)
链表(记录谁在等待队列,来实现休眠和唤醒)

队列的链表可分为两个,一个是等待读的链表,另一个是等待写的链表(如下所示)

List_t xTasksWaitingToSend;
List_t xTasksWaitingToReceive;

5、动态创建队列——xQueueCreate()

在这里插入图片描述
例如:

xQueue = xQueueCreate( 5 , sizeof(int32_t) )

表示创建了一个长度为5、数据大小为4字节的队列。
以前面举例来说,其队列的空间大小是buff的大小加上头部(队列控制块)的大小,而buff的大小为5*4=20个字节。
在这里插入图片描述
当消息队列被创建时,系统会为队列控制块分配对应的内存空间,用于保存消息队列的一些信息如消息的存储位置,头指针 pcHead、尾指针 pcTail、消息大小 uxItemSize 以及队列长度 uxLength,以及当前队列消息个数uxMessagesWaiting 等。

6、队列删除函数—— vQueueDelete()

传输进去的实参是要删除队列的句柄。

7、读队列

(1)读队列流程示意图

在这里插入图片描述

(2)API函数——xQueueReceive()与xQueueReceiveFromISR()

BaseType_t xQueueReceive( QueueHandle_t xQueue,void * const pvBuffer,TickType_t xTicksToWait );
BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue,void *pvBuffer,BaseType_t *pxTaskWoken);

在这里插入图片描述

8、写队列

(1)写队列流程

在这里插入图片描述

(2)API函数

在这里插入图片描述

1)向队尾写入数据

/* 等同于 xQueueSendToBack
* 往队列尾部写入数据,如果没有空间,阻塞时间为 xTicksToWait
*/
BaseType_t xQueueSend(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait );
/* 
* 往队列尾部写入数据,如果没有空间,阻塞时间为 xTicksToWait
*/
BaseType_t xQueueSendToBack(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait);
/* 
* 往队列尾部写入数据,此函数可以在中断函数中使用,不可阻塞
*/
BaseType_t xQueueSendToBackFromISR(QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t *pxHigherPriorityTaskWoken );

2)向队头写入数据

/* 
* 往队列头部写入数据,如果没有空间,阻塞时间为 xTicksToWait
*/
BaseType_t xQueueSendToFront( QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait );
/* 
* 往队列头部写入数据,此函数可以在中断函数中使用,不可阻塞
*/
BaseType_t xQueueSendToFrontFromISR( QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t *pxHigherPriorityTaskWoken);

9、查询队列

 返回队列中可用数据的个数
*/
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue );
/*
* 返回队列中可用空间的个数
*/
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue );

10、复位队列

/* pxQueue : 复位哪个队列;
* 返回值: pdPASS(必定成功)
*/
BaseType_t xQueueReset( QueueHandle_t pxQueue);

相关内容

热门资讯

现货黄金首破4840美元!国内... 来源:中新经纬APP 21日早盘,现货黄金站上4840美元/盎司,续刷新高。 截至发稿,伦敦金现涨1...
跟着门店扩张来炒股!公募布局思... 春节临近,门店扩张逻辑驱动线下消费板块迎来估值修复,公募基金重仓的连锁消费龙头股价表现亮眼。 因景气...
东易日盛陈辉:还款日,才真正打... 乐居财经 李兰1月20日,东易日盛于北京举办“穿越·共生”老友茶叙,这是公司司法重整计划执行完毕后的...
知名大V被罚超8300万元!雪... 1月19日,浙江证监局发布行政处罚决定书,对雪球大V金永荣操纵证券市场行为作出处罚。 金永荣因通过“...
2370万!全民拯救李亚鹏背后... *此图由AI生成 作者| 史大郎&猫哥 来源| 是史大郎&大猫财经Pro “嫣然天使儿童医院也许会...
高新技术企业“摘帽”的警示(纵... 余明辉 据不完全统计,2025年,超4300家企业被剔除出高新技术企业行列。仅2025年12月,北京...
港股异动丨TCL电子飙升超16... TCL电子(1070.HK)盘中一度大涨超16%,报12.67港元,股价创2004年9月以来新高。消...
2026全球纳豆激酶行业白皮书... 前言:在全球心脑血管疾病防控需求升级及“非药物干预”理念普及背景下,纳豆激酶作为源自传统发酵食品的天...
微软CEO纳德拉:能源成本成人... 【环球网科技综合报道】1月21日消息,据CNBC报道,在近日举行的世界经济论坛(WEF)上,微软首席...
坐拥九大万亿级产业集群,谁会成... 在广东制造业高质量发展的壮阔版图中,万亿级产业集群始终是核心支柱。从新一代电子信息到新能源产业,九大...
startrader:波兰央行... 2026年1月20日,波兰央行正式宣布批准一项规模达150吨的黄金增持计划,完成后该国黄金储备将从当...
【IPO前哨】左手能源右手机器... 在A股上市十五年后,科大智能(300222.SZ)正式迈出了“A+H”双重上市的关键一步。于1月19...
港股异动 | 律齐文化盘中涨超... 1月21日,律齐文化盘中股价涨幅超过220%。截至10时19分,律齐文化报0.38港元/股,涨幅为2...
科创板早盘持续拉升,科创50相... 每经记者:叶峰 每经编辑:肖芮冬 科创板早盘持续拉升,科创50指数创年内新高。龙芯中科大涨20%,海...
【钛晨报】激发民间投资、促进消... 【钛媒体综合】今年的首场国务院常务会议研究推出财政金融促内需一揽子政策,社会上高度关注。1月20日,...
【银行“开门红”信贷调查:严格... 【银行“开门红”信贷调查:严格遵循大数据风控模型,所谓的审批“放水”仅是营销话术】年初历来是银行信贷...
终止A股IPO辅导,玖物智能转... 1月19日,港交所文件显示,苏州玖物智能科技股份有限公司(“玖物智能”)向港交所提交上市申请书,联席...
建材及黄金股相关ETF走高 商... 上证报中国证券网讯(记者 王彭)1月20日,建材ETF、建材ETF易方达、黄金股票ETF基金、地产E...
净流入9连阳!两市唯一的中证红... 1月21日,两市震荡回暖。数据显示,截至9时54分,两市唯一的中证红利质量ETF(159209)跌0...
查出肺结节别乱忌口!这 3 类... 太原龙城中医医院科普,在体检中查出肺结节后,很多人会感到忧心忡忡,除了关注治疗和复查,还会在饮食方面...