C++ 对于多个设备的返回数据进行打包的问题 10C

有一个专门的线程类对3个设备返回的数据进行打包,在不确定哪个数据先到的情况下,请问怎么样才能将数据A,B,C按照顺序装入D中,怎么样才能确认一个数据包已经装好了,可以发出去?

0

2个回答

先开一个数组,然后将a b c放入对应的下标。
同时再定义一个int数组,3个元素都是0,每放入1个数字,就对应下标设置1
等这个数组全是1,就是就绪了。

0

很简单,基本是动态数组的思想:
第一步:先定义一个数据结构,代表每个设备的信息,例如:
//应答帧:心跳包
__packed typedef struct{
u8 mHead; //帧头
u8 mAddr; //地址,每个设备给一个区分的ID
u8 mFunc; //功能码:这里功能码可以用来标记当前节点是否有有效数据到来
u8 mBuf[3]; //数据区域缓冲区:第一个字节表示自学习强度,第二个表示实时强度,第三个表示电源状态
u8 mCRC; //CRC校验:求和校验(CRC=mAddr+mFunc+mLen+mBuf)
}sHeartBeatFrame;

第二步:定义一个动态数组,使用的时候注意malloc和free內存,可以在这里规定第一个数组元素放哪个设备
sHeartBeatFrame *mPtr;//指向多个节点设备的信息结构的 指针
u8 mLen;//代表有多少个节点
u8 mFlag;//表示一帧满的标识(比如装填完了mLen个节点元素)

第三步:比如你要用3个元素,甚至更多都可以,动态数组开始初始化,初始化全部初始化为你想要的信息

第四步:当有一个设备发来的信息包,经过长度等等你想要的一系列检查后,判断设备ID,然后装填到你申请的动态数组固定位置(或者你想要的位置)

第五步:检查mFlag,判断为1直接发送。然后别忘了重置一些列中间变量,如清数组缓冲区,并且置mFlag为0

第六步:重复第四步和第五步。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!