• 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)

     

  • 相关阅读:
    贪婪算法、递归计算、动态规划背包问题
    递归、动态规划计算斐波那契数列
    用于确定两个字符串最长公共子串的函数
    快速排序算法
    顺序、二分查找文本数据
    MyBatis面试题
    Spring面试题
    SpringMvc面试题
    jsp和servlet面试
    EJB的理解
  • 原文地址:https://www.cnblogs.com/luxiaoguogege/p/10227108.html
Copyright © 2020-2023  润新知