其他分享
首页 > 其他分享> > FreeRTOS消息队列传递数组

FreeRTOS消息队列传递数组

作者:互联网

1、使用消息队列的发送和接收前,需要先创建消息队列

2、消息队列的深度和大小

  深度 就是数组的元素个数

  大小 就是整个数组占用的空间大小

消息队列的创建

static void AppObjCreate(void)
{
    xQueueAdcValue = xQueueCreate(6, sizeof(uint16_t) * 6);
    if (xQueueAdcValue == 0) {
        /* 没有创建成功,用户可以在这里加入创建失败的处理机制 */
    }
    xQueueAdcAlarm = xQueueCreate(6, sizeof(uint16_t) * 6);
    if (xQueueAdcAlarm == 0) {
        /* 没有创建成功,用户可以在这里加入创建失败的处理机制 */
    }
    /* 创建10个uint8_t型消息队列 */
    xQueue2 = xQueueCreate(10, sizeof(uint8_t));
    if (xQueue2 == 0) {
        /* 没有创建成功,用户可以在这里加入创建失败的处理机制 */
    }
}
消息队列的发送

__IO uint16_t avrgADCConvertedValue[ADC_CH_NUM]; //经过滤波算法后的数值

void adc_value_queue_publish(void)
{
    static uint8_t pub_cnt = 0;
    if (++pub_cnt > 200) // 10s
    {
        pub_cnt = 0;
        if (xQueueSend(xQueueAdcValue, (void*)avrgADCConvertedValue, (TickType_t)10) == pdPASS) {
            test_rtt_printf(0, 0, "adc value queue is published!\r\n");
        } else {
            test_rtt_printf(0, 0, "adc value queue publish falut!\r\n");
        }
    }
}
消息队列的接收

    uint16_t ADCValue[6];

    if (pdPASS == xQueueReceive(xQueueAdcValue, (void*)ADCValue, (TickType_t)10)) {
        test_rtt_printf(0, 0, "adc value queue is received!\r\n");
        adc_value_to_can_data(ADCValue, pub_dat);
        can1_msg_send(0x00, CAN_EXTID_PUBLSIH, CAN_ID_EXT, CAN_RTR_DATA, 8, pub_dat);
    }

 

标签:pub,FreeRTOS,队列,创建,void,value,adc,数组
来源: https://www.cnblogs.com/realiot/p/16279097.html