OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4905|回复: 2

如何用队列传结构体实体,而非指针传递?

[复制链接]

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-1-13
在线时间
29 小时
发表于 2017-9-20 16:12:44 | 显示全部楼层 |阅读模式
1金钱
现在有一个线程用队列来获取别的线程送过来的数据并进行处理,数据传递用消息队列,这样也能起到一个buffer 的作用。数据量不大,也就20个字节的样子,定了一个队列元素结构如下
struct
{
uint32_t length;
uint8_t data[16];
}qDataType;

在接收线程中,
xQueueReceive(HostUpStreamHandle,&qOut,osWaitForever);

发送线程中,发送函数这样定义,另一个线程也一样
void Send1()
{
qDataType d1;
for(;;)
  {
     /*d1赋值代码,省略*/
     xQueueSend(HostUpStreamHandle,&qIn2,osWaitForever);
  }
}

因为FreeRTOS不是用COPY的方式传递数据吗?我在发送线程里把整个数据,而不是指针,送到队列。这样虽然占内存或需要复制时间,但是对于我这个小型应用来说,可以接收。
但是发现队列取出的数据不对,是什么原因?
如何用消息队列传传结构体实体,而不是指针?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1459
金钱
1459
注册时间
2011-12-1
在线时间
110 小时
发表于 2017-9-20 16:29:31 | 显示全部楼层
用联合体定义数组代替结构体传输。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-9-20 16:42:51 | 显示全部楼层
会用联体合的人.C语言掌握得基本差不多了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 23:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表