zoukankan      html  css  js  c++  java
  • 007_FreeROTS队列

     

     

    (一)目的:进程间的通信

    (二)队列创建

    1. 动态创建队列,函数 xQueueCreate()

     

    QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,
                   UBaseType_t uxItemSize) 参数: uxQueueLength: 要创建的队列的队列长度,这里是队列的项目数。 uxItemSize: 队列中每个项目(消息)的长度,单位为字节 返回值: 其他值: 队列创捷成功以后返回的队列句柄! NULL: 队列创建失败

     

     

    2. 静态创建队列, 函数 xQueueCreateStatic()

    QueueHandle_t xQueueCreateStatic( UBaseType_t uxQueueLength,
                         UBaseType_t uxItemSize,                      uint8_t
    * pucQueueStorageBuffer,                      StaticQueue_t * pxQueueBuffer)


    参数:

    uxQueueLength: 要创建的队列的队列长度,这里是队列的项目数。
    uxItemSize: 队列中每个项目(消息)的长度,单位为字节
    pucQueueStorage: 指向队列项目的存储区,也就是消息的存储区,这个存储区需要用户自
    行分配。此参数必须指向一个 uint8_t 类型的数组。这个存储区要大于等
    于(uxQueueLength * uxItemsSize)字节。
    pxQueueBuffer: 此参数指向一个 StaticQueue_t 类型的变量,用来保存队列结构体。
    返回值:
    其他值: 队列创捷成功以后的队列句柄!
    NULL: 队列创建失败。

    3. 队列类型

    队列类型,由于 FreeRTOS 中的信号量等也是通过队列来实现的,创建信号
    量的函数最终也是使用此函数的,因此在创建的时候需要指定此队列的用途,
    也就是队列类型,一共有六种类型:
    queueQUEUE_TYPE_BASE 普通的消息队列
    queueQUEUE_TYPE_SET 队列集
    queueQUEUE_TYPE_MUTEX  互斥信号量
    queueQUEUE_TYPE_COUNTING_SEMAPHORE 计数型信号量
    queueQUEUE_TYPE_BINARY_SEMAPHORE 二值信号量
    queueQUEUE_TYPE_RECURSIVE_MUTEX  递归互斥信号量
    函 数 xQueueCreate() 创 建 队 列 的 时 候 此 参 数 默 认 选 择 的 就 是
    queueQUEUE_TYPE_BASE。

    动态创建函数:xQueueCreate()本质是 xQueueGenericCreate()函数
    静态创建函数:xQueueCreateStatic()本质是 xQueueGenericCreateStatic()函数

     

    (三)队列初始化,函数prvInitialiseNewQueue()

     

    static void prvInitialiseNewQueue(   const UBaseType_t uxQueueLength, //队列长度
                          const UBaseType_t uxItemSize, //队列项目长度
                          uint8_t *  pucQueueStorage, //队列项目存储区
                          const uint8_t ucQueueType, //队列类型
                          Queue_t * pxNewQueue )  //队列结构体

     

     (3.3)后面的具体查看freertos手册看参数

    (四)向队列发送消息

     

     (五)从队列 读取

     (六)使用示例

    、1. 定义

    #define MESSAGE_Q_NUM 4 //发送数据的消息队列的数量 (2)
    QueueHandle_t Message_Queue; //信息队列句柄

     2. 创建消息 Message_Queue,队列项长度是串口接收缓冲区长度

    Message_Queue=xQueueCreate(MESSAGE_Q_NUM,USART_REC_LEN);  

    3. 终端中向队列中发送数据

    xQueueSendFromISR(Message_Queue,USART_RX_BUF,&xHigherPriorityTaskWoken);

    4. 请求消息 Message_Queue

    err=xQueueReceiveFromISR(Message_Queue,buffer,&xTaskWokenByReceive)

     

  • 相关阅读:
    Unknown custom element: <el-container1>
    jQuery手机对话框插件
    告别2013,迎接2014
    淘宝开放平台主动通知的实现
    搭建JavaWeb服务器
    深入理解JavaScript执行上下文和执行栈
    为什么要选择学习Java?适合零基础的初学者的文章
    成为一名优秀的Java程序员9+难以置信的公式
    深入理解JavaScript作用域和作用域链
    JavaScript数据类型转换
  • 原文地址:https://www.cnblogs.com/luxiaoguogege/p/10227108.html
Copyright © 2011-2022 走看看