有一个结构体用于描述队列,叫做 Queue_t,这个结构体在文件 queue.c 中定义。
3、队列创建
在使用队列之前必须先创建队列,有两种创建队列的方法,一种是静态的,使用函数xQueueCreateStatic();另一个是动态的,使用函数
xQueueCreate()。这两个函数本质上都是宏,真正完成队列创建的函数是 xQueueGenericCreate()和
xQueueGenericCreateStatic(),这两个函数在文件 queue.c 中定义。
函数 prvInitialiseNewQueue() 用于队列的初始化,此函数在文件 queue.c 中定义。
函数 prvInitialiseNewQueue()中调用了函数 xQueueGenericReset()来复位队列。
比如我们创建一个有 4 个队列项,每个队列项长度为 32 个字节的队列 TestQueue,创建成功的队列如图所示:
在创建的时候需要指定此队列的用途,也就是队列类型,一共有六种类型:
queueQUEUE_TYPE_BASE 普通的消息队列
queueQUEUE_TYPE_SET 队列集
queueQUEUE_TYPE_MUTEX 互斥信号量
queueQUEUE_TYPE_COUNTING_SEMAPHORE 计数型信号量
queueQUEUE_TYPE_BINARY_SEMAPHORE 二值信号量
queueQUEUE_TYPE_RECURSIVE_MUTEX 递归互斥信号量
4、向队列发送消息
FreeRTOS 提供了 8 个向队列发送消息的 API 函数:
5、队列上锁和解锁
队列的上锁和解锁是两个 API 函数:prvLockQueue()和 prvUnlockQueue()。
6、从队列读取消息
有入队就有出队,出队就是从队列中获取队列项(消息),FreeRTOS 中出队函数如表示:
具体的函数用法大家可以在用到的时候百度,这里就不详细介绍了,大家知道有这些东西就行。其中最重要的是任务级和中断级不一样,在中断处理函数中是由一套自己的
API 用的。
全部0条评论
快来发表一下你的评论吧 !