队列的进阶
一、队列、消息队列
队列是什么,对于程序员都不会陌生,在单片机开发的时候,也会有接触。比如串口,有些MCU的串口为了高效自带FIFO功能。队列简单易用,在物联网下基于RTOS的开发中更是显神通,称为消息队列。
消息队列在FreeRTOS下所有的通信与同步机制都是基于队列实现的。用法和创建任务类似,独立于任务,也是RTOS下核心的一个组件。主要有几个特性:
1.缓冲数据:和普通队列一样
关注溢出,RTOS下数据的大小和队列的深度(个数)应该是已知的。不允许装入超出创建大小范围的数据。比如创建的时候队列大小为128个字节,个数为3。而实际装入的数据超过128,那么就给引入hardfault或者堆栈异常等问题。
2.多任务安全调用
关注安全,系统允许用户多任务对一个队列写入内容,至于队列本身的安全由系统保证。
3.阻塞
读空或写入满的时候会阻塞,可以用来把任务挂起,这个功能和消息队列的用法是一样的。
4.地址传输
如果需要传输的数据比较大。比如超过512/1024个字节,且经常要传输的数据。可以考虑传输地址的操作。FreeRTOS下的头文件中已经给出了示例,如下&