完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在函数osMessageGet 只能返回一个4个字节啊。在xQueueReceive它只传了一个uint32_t v啊,只有四个字节。
那就限制了最大的数据就是四个字节了,感觉应该不会是这样啊,那么我怎么使用队列,发送一个12个字节的结构体呢? osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec) { portBASE_TYPE taskWoken; tickType_t ticks; osEvent event; ................... ............... else { if (xQueueReceive(queue_id, event.value.v, ticks) == pdTRUE) { /* We have mail */ } return event; } typedef struct { osStatus status; ///< status code: event or error information union { uint32_t v; ///< message as 32-bit value void *p; ///< message or mail as void pointer int32_t signals; ///< signal flags } value; union { osMailQId mail_id; ///< mail id obtained by ref osMailCreate osMessageQId message_id; ///< message id obtained by ref osMessageCreate } def; ///< event definition |
|
相关推荐
1个回答
|
|
在FreeRTOS中,队列的传输单元是一个字节,因此无法直接发送一个结构体。但是,你可以按照以下步骤发送结构体:
1. 在发送结构体之前,将结构体的内容拷贝到一个字节数组中,确保数组的大小足够容纳整个结构体。 2. 将字节数组作为消息发送到队列中。 3. 在接收队列的任务中,接收到消息后,可以将字节数组中的内容拷贝回结构体中。 这里是一个示例代码,说明了如何发送和接收一个结构体: ```c // 定义一个结构体 typedef struct { int a; float b; char c; } MyStruct; // 定义结构体的大小 #define STRUCT_SIZE sizeof(MyStruct) // 发送结构体到队列的任务 void sendTask(void const *argument) { MyStruct dataToSend = {10, 3.14f, 'A'}; uint8_t buffer[STRUCT_SIZE]; memcpy(buffer, &dataToSend, STRUCT_SIZE); if (xQueueSend(queue_id, buffer, 0) != pdPASS) { // 处理发送失败 } osDelay(100); } // 接收队列中的结构体任务 void receiveTask(void const *argument) { uint8_t buffer[STRUCT_SIZE]; for (;;) { if (xQueueReceive(queue_id, buffer, portMAX_DELAY) == pdPASS) { MyStruct receivedData; memcpy(&receivedData, buffer, STRUCT_SIZE); // 使用接收到的结构体数据 printf("Received: a=%d, b=%.2f, c=%c", receivedData.a, receivedData.b, receivedData.c); } } } ``` 在上面的示例代码中,首先定义了一个名为`MyStruct`的结构体,并使用`STRUCT_SIZE`宏定义来表示结构体的大小。然后,在发送任务中,将结构体数据拷贝到`buffer`字节数组中,并使用`xQueueSend`函数将字节数组发送到队列中。在接收任务中,使用`xQueueReceive`函数接收队列中的字节数组,并将其拷贝回结构体中。接收到的结构体数据可以根据需要进行处理。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1934 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1710 浏览 1 评论
1187 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
785 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1752 浏览 2 评论
1992浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
827浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
281浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
638浏览 3评论
645浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-3 08:12 , Processed in 0.467023 second(s), Total 41, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号