搜索
bottom↓
回复: 12

求教ucos发送消息邮箱中如何保护发送的数据内容

[复制链接]

出0入0汤圆

发表于 2015-5-21 17:14:01 | 显示全部楼层 |阅读模式
如果发送消息邮箱,在没有进入等待消息邮箱时,更新了消息邮箱发送的数据内容,那么接收的数据就被更新了,而不是上次消息邮箱发送值。那么是否消息邮箱发送加上内存管理进行保护比较好?ucos内存管理感觉又太浪费了~~,求教有什么好方法保护消息邮箱的数据?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-5-21 18:03:12 | 显示全部楼层
是加上内存管理比较好

出0入0汤圆

 楼主| 发表于 2015-5-21 18:05:15 | 显示全部楼层
weshare 发表于 2015-5-21 18:03
是加上内存管理比较好

ucos的内存块是固定长度而且至少两个,每次使用要考虑最长空间长度,很耗内存~

出0入0汤圆

 楼主| 发表于 2015-5-21 18:07:09 | 显示全部楼层
weshare 发表于 2015-5-21 18:03
是加上内存管理比较好

ucos的内存块是固定长度而且至少两个,每次使用要考虑最长空间长度,很耗内存~

出0入0汤圆

发表于 2015-5-21 18:24:56 | 显示全部楼层
tian_zi 发表于 2015-5-21 18:07
ucos的内存块是固定长度而且至少两个,每次使用要考虑最长空间长度,很耗内存~ ...

要不然自己实现可控长度的,这个好像不现实。不然你就不释放就好了嘛,

出0入0汤圆

 楼主| 发表于 2015-5-21 18:44:28 | 显示全部楼层
weshare 发表于 2015-5-21 18:24
要不然自己实现可控长度的,这个好像不现实。不然你就不释放就好了嘛, ...

不可能不释放吧,新的数据和内存申请还是需要内存的,况且内存也不是无限的

出0入0汤圆

发表于 2015-5-21 18:48:30 | 显示全部楼层
ucos的邮箱发的只是内存指针啊,当然会被更新掉。如果数量一定大小一样,可以简单的用数组+单向链表管理。发送时pop出链表,然后赋值,然后发送。接收到后push入链表。

出0入0汤圆

 楼主| 发表于 2015-5-21 18:52:49 | 显示全部楼层
flamma 发表于 2015-5-21 18:48
ucos的邮箱发的只是内存指针啊,当然会被更新掉。如果数量一定大小一样,可以简单的用数组+单向链表管理。 ...

那如果消息邮箱发送的是非定长的数据呢?

出0入0汤圆

发表于 2015-7-3 10:37:29 | 显示全部楼层
ucos的邮箱发的只是内存指针,必须做好任务访问同步。

出0入0汤圆

 楼主| 发表于 2015-7-3 11:44:11 | 显示全部楼层
showcan 发表于 2015-7-3 10:37
ucos的邮箱发的只是内存指针,必须做好任务访问同步。

能举例说明一下如何任务访问同步吗,加信号量?

出0入0汤圆

发表于 2015-7-3 16:17:27 | 显示全部楼层
可以用信号量。
信号量A:初值:0
信号量B:初值为:1

发送方任务:
PEND(B)
更新要发送的数据
邮箱发送
POST(A)

接收方任务:
PEND(A)
使邮箱接收
使用数据
POST(B)

不过这样一来,其实使用邮箱没什么必要,直接读写全局变量吧

出0入0汤圆

 楼主| 发表于 2015-7-3 16:25:26 | 显示全部楼层
showcan 发表于 2015-7-3 16:17
可以用信号量。
信号量A:初值:0
信号量B:初值为:1

用全局变量就没有同步功能了吧

出0入0汤圆

发表于 2015-7-10 13:43:03 | 显示全部楼层
消息邮箱的数据要保持透明(在ucosiii书里作者也强调过),邮箱传递的是指针,透明的意思就是在传递的数据还没消耗(用完),要保持数据不变。
保护消息邮箱的数据---有2种方法
一种是加速消耗,接收端接到邮箱后,先把邮箱里的信息保存在另一个缓冲区里,保存完再做下一步的处理
第二种是,每次发送邮箱时,发送的指针所指的缓冲区不一样就行,我们可以设置比如3个缓冲区,每次发送指向不同的缓冲区,这次用缓冲区3,下次在用1,就像队列一样。

或者你改用消息队列,直接就都省事了,在ucosIII里已经取消了邮箱,以为邮箱是可以看成只有一条消息的队列
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 08:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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