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