freertos之队列

队列的创建

队列的创建有两种方法:动态分配内存、静态分配内存,
动态分配内存:xQueueCreate,队列的内存在函数内部动态分配

动态创建:
freertos之队列_第1张图片
静态创建:
freertos之队列_第2张图片
静态创建的示例代码:
freertos之队列_第3张图片

对队列进行操作的相关函数

复位

freertos之队列_第4张图片

删除

在这里插入图片描述

写队列

写到尾部

这两个函数是等同的,都是从在任务里写,第三个是在中断里写
freertos之队列_第5张图片

freertos之队列_第6张图片
freertos之队列_第7张图片

写到头部

freertos之队列_第8张图片

写队列的参数说明

freertos之队列_第9张图片

读队列

使用 xQueueReceive() 函数读队列,读到一个数据后,队列中该数据会被移除。这个函数有两个版本:在任务中使用、在ISR中使用。函数原型如下:
freertos之队列_第10张图片

参数说明

freertos之队列_第11张图片

查询

可以查询队列中有多少个数据、有多少空余空间。函数原型如下:
freertos之队列_第12张图片

覆盖

当队列长度为1时,可以使用 xQueueOverwrite() xQueueOverwriteFromISR() 来覆盖数据。注意,队列长度必须为1。当队列满时,这些函数会覆盖里面的数据,这也以为着这些函数不会被阻塞。
freertos之队列_第13张图片

偷看

如果想让队列中的数据供多方读取,也就是说读取时不要移除数据,要留给后来人。那么可以使用"窥视",也就是 xQueuePeek() 或 xQueuePeekFromISR() 。这些函数会从队列中复制出数据,但是不移除数据。这也意味着,如果队列中没有数据,那么"偷看"时会导致阻塞;一旦队列中有数据,以后每次"偷看"都会成功。freertos之队列_第14张图片

你可能感兴趣的:(stm32)