OpenEdv-开源电子网

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

消息队列的问题

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2014-5-25
在线时间
18 小时
发表于 2016-5-31 16:29:47 | 显示全部楼层 |阅读模式
1金钱
ucosII的消息队列传递的是指针,那么这个需要传递的指针是不是必须是全局变量或是malloc分配后的指针?
如果一个指针ptr的内容是1,用OSQPost()发送之后,在OSQPend接收之前,指针ptr的内容变为0,那么最后OSQPend接收到底指针内容也是0吧?

最佳答案

查看完整内容[请看2#楼]

问题是不管你发送的是什么,这些是应用处理的,你应该管理好你的代码,系统本身肯定不会在中间修改你的东西。如果修改了,肯定是你的代码哪里还继续修改了指针的内容,你应该问你自己为啥这样写代码。就像在windows上实现一个异步串口发送数据一样,当你send后数据已经被内部new出来的新buf存放,并发送到写线程,你哪里有机会修改里面的内容啊?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-5-31 16:29:48 | 显示全部楼层
stopshooting 发表于 2016-6-1 11:43
调试过了,确实会改动,消息队列传递的只是指针。
所以我试试建立一个PostMessage和GetMessage,只传递 ...

问题是不管你发送的是什么,这些是应用处理的,你应该管理好你的代码,系统本身肯定不会在中间修改你的东西。如果修改了,肯定是你的代码哪里还继续修改了指针的内容,你应该问你自己为啥这样写代码。就像在windows上实现一个异步串口发送数据一样,当你send后数据已经被内部new出来的新buf存放,并发送到写线程,你哪里有机会修改里面的内容啊?
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-6-1 09:10:10 | 显示全部楼层
发送的东西难道还有人会去改吗?
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2014-5-25
在线时间
18 小时
 楼主| 发表于 2016-6-1 11:43:27 | 显示全部楼层
ysq7120 发表于 2016-6-1 09:10
发送的东西难道还有人会去改吗?

调试过了,确实会改动,消息队列传递的只是指针。
所以我试试建立一个PostMessage和GetMessage,只传递消息内容。
回复

使用道具 举报

5

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-5-29
在线时间
5 小时
发表于 2016-6-1 19:23:04 | 显示全部楼层
路过学习
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-6-1 20:10:42 | 显示全部楼层
发送的是指针首地址,发送完以后,他还是从你发送的地址去读/写,但是你如果这个内存释放,或者给其他程序用,就有可能有问题了。
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2014-5-25
在线时间
18 小时
 楼主| 发表于 2016-6-2 00:12:19 | 显示全部楼层
本帖最后由 stopshooting 于 2016-6-2 00:33 编辑

谢谢各位的关注!我程序中有个扫描任务,需要将扫描结果传递给其他任务,每次的扫描结果都是输出到同一个buf上的,而这个扫描任务有可能会在某段时间内多次Post。如果仅仅只是传递这个buf的指针,这个消息会被后来的扫描结果覆盖掉,也就是说收到的多个消息都是一样的。
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-6-2 08:42:49 | 显示全部楼层
stopshooting 发表于 2016-6-2 00:12
谢谢各位的关注!我程序中有个扫描任务,需要将扫描结果传递给其他任务,每次的扫描结果都是输出到同一个bu ...

使用内存池,然后从内存池里面申请一段内存存放你的扫描信息,然后发送,处理任务接收到消息,处理完释放内存。如果你用扫描信息长度是固定的,可以用os自带的内存管理函数。不然用开发板推荐的吧。我上面给你举串口的例子都说了,你都没看懂
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 19:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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