请教关于MsgQ是否会打乱数据的问题

saltyren 2013-11-26 11:21:50
最近遇到一个关于消息队列MsgQ的问题,请大家帮忙指点。
我的程序有多个任务通过UDP协议接收数据,这些任务通过同一个消息队列将接收的数据发送给一个数据管理任务。我的消息结构为
{
int sendId;
int recvId;
unsigned char* pValue;
int nLength;
}

每个数据接收任务都有一个循环缓冲区接收到数据,将数据存储后把缓冲区中这条数据的地址放在消息的pValue中,这样做是为了减少消息队列中传输的数据,而且尽量保证消息队列中的数据长度都是一样的。

当每个任务数据都不快是这种机制没有问题,但是当某个任务数据突然快速收到时,其他任务给数据管理任务的数据就出错了,这是为什么呢?

我自己分析了两种可能:
1 数据接收任务缓冲区过小(现在设了10个数据的缓冲),当其他任务数据过快时,数据管理模块处理不过来,本数据接收任务的数据就被覆盖了(但是出错的数据又不像覆盖,因为这些数据都是缓变量,错误的数据却是一些随机数据,没什么太多规律);

2 多个任务通过一个消息队列传输数据给数据管理任务可能存在数据冲突,网上有的说两个双工任务应创建2个消息队列,有的说多个任务与1个任务通信时可以只用1个消息队列。

我现在也分析不出来其他什么原因了,反正就是觉得在消息队列中传输指针又不做好保护很危险,可是又不知道这种情况应该怎样处理呢?请大家帮我把把关,分析一下问题所在,谢谢大家~~
...全文
430 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenspan 2014-02-03
  • 打赏
  • 举报
回复
pValue=new char[dataLen]; 用完后,delete[] pValue;
saltyren 2013-11-27
  • 打赏
  • 举报
回复
各位大虾帮忙啊

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧