uart过来数据不够,组包

原创 2015年07月08日 14:50:19
unsigned char aTmpBuf[MAX_SIZE] = {0};
unsigned char aParsBuf[MAX_SIZE/2] = {0};

int iDex=0,iSaveDex=0,iGetDex=0,iGetCnt=0;

count = read(fd, buf, 512);
if(count)
{
if((iSaveDex+count)<MAX_SIZE)
{
memcpy(aTmpBuf+iSaveDex,buf,count);
iSaveDex+=count;
printf("iDex:%d, count:%d\n",iSaveDex, count);
/*printf("rev buf \n");
for(i=0;i<count;i++)
{
printf("%02x ",aTmpBuf[iSaveDex-count+i]);
}
printf("\n");*/

}else
{
memcpy(aTmpBuf+iSaveDex,buf,(MAX_SIZE-iSaveDex));
//iSaveDex=0;
memcpy(aTmpBuf,buf+(MAX_SIZE-iSaveDex),(count-(MAX_SIZE-iSaveDex)));
iSaveDex=count-(MAX_SIZE-iSaveDex);
}
//printBuf(aTmpBuf,iSaveDex);
/*printf("aTmpBuf buf \n");
for(i=0;i<iSaveDex;i++)
{
printf("%02x ",aTmpBuf[i]);
}
printf("\n");*/
printf("iSaveDex %d ,iGetDex %d \n",iSaveDex,iGetDex);
//if(((iSaveDex-iGetDex)>32)||(iSaveDex-iGetDex)<0)
if(((iSaveDex-iGetDex)>MAX_SIZE/32)||((iSaveDex-iGetDex)<0&&((MAX_SIZE+iSaveDex-iGetDex)>MAX_SIZE/32)))
{
if((0xff==aTmpBuf[iGetDex%MAX_SIZE])&&(0xff==aTmpBuf[(iGetDex+1)%MAX_SIZE]))//&&(0xff==aTmpBuf[aTmpBuf[iGetDex+2]+6]))
{
iGetCnt=aTmpBuf[(iGetDex+2)%MAX_SIZE]+6;
if((iGetDex+iGetCnt)<MAX_SIZE)
{
memcpy(aParsBuf,aTmpBuf+iGetDex,iGetCnt);
iGetDex+=iGetCnt;
}
else
{


memcpy(aParsBuf,aTmpBuf+iGetDex,(MAX_SIZE-iGetDex));
memcpy(aParsBuf+(MAX_SIZE-iGetDex),aTmpBuf,(iGetCnt-(MAX_SIZE-iGetDex)));
iGetDex=iGetCnt-(MAX_SIZE-iGetDex);
}
printf("iGetCnt is %d \n",iGetCnt);
printBuf(aParsBuf,iGetCnt);
int back =  g_CalcUartIf(aParsBuf, iGetCnt, uartBuf, &msgSize);
  printf("back:%d\n", back);
}
else
{

}

}



      }

TCP 组包和拆包算法

TCP 组包和拆包实现算法,由于TCP是基于流的,发的数据不是发几包就能收到几包的,会把你发的数据重新组包,所以自己要加入帧格式,自己来判断每一包。一个是发定长的包,这个好实现,但是会浪费带宽,这里实...
  • zhonghaima
  • zhonghaima
  • 2016年04月03日 21:38
  • 1118

netty 数据分包、组包、粘包处理机制

转载自 断鸿零雁 blog.163.com/linfenliang@126 1.            frame包整体功能描述 此包主要作用于对TCP/IP数据包的分包和包重组,常用于数据的流传...
  • cluzax
  • cluzax
  • 2015年07月09日 07:02
  • 2379

简析H264分包组包

ps:此文是参照某大神文章所写,恕找不到地址,抱歉! 1. 网络抽象层单元类型 (NALU)   NALU 头由一个字节组成, 它的语法如下:      +--------------...
  • tanningzhong
  • tanningzhong
  • 2016年08月30日 16:09
  • 884

UART数据收发波形

通过波形分析方法调试UART数据收发   (2011-12-14 14:40:28) 转载▼ 标签:  杂谈 分类: 硬件设计  ...
  • wangfuzi35
  • wangfuzi35
  • 2016年04月22日 21:23
  • 1266

BLE蓝牙的数据黏包处理

1.首先说明一下本文档的背景: 由于BLE蓝牙传输一个包最多只能18个字节,而实际通讯自己定的协议一般都会超过18个字节,而数据也一般会有非常多个包一起发送,这个时候很多包就会黏在一起,而其实最好最...
  • black_yu
  • black_yu
  • 2016年11月01日 11:03
  • 766

【EmbeddedDev】C中UART的数据读写

当两个控制子系统之间需要进行一些比较复杂的数据交互时, UART接口可以提供帮助。 UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)...
  • moxiaomomo
  • moxiaomomo
  • 2016年09月02日 10:24
  • 945

关于网络通信中数据包的组包问题

    网络通信中,通常需要对数据包进行组包操作,即是给指定的数据包加上起始标识、长度等附加信息。本人在开发流媒体项目过程中,就面临着这样一个问题。其实这类问题并不难解决,之所以在这里提出来,主要目的...
  • huangxinfeng
  • huangxinfeng
  • 2010年01月25日 21:48
  • 4112

UART学习笔记一:如何判断一帧数据收完

好久就先写个东东总结下,但是一直没有时间(都是借口,就是因为懒)。今天下午在整理UART模块驱动,正好记录下,想到哪里,写到哪里,大家勿怪。。。     UART接收数据,一个字节一个字节接收,底层硬...
  • wuhenyouyuyouyu
  • wuhenyouyuyouyu
  • 2016年11月28日 15:56
  • 2802

Qt通过UDP传图片,实现自定义分包和组包

一.包头结构体 //包头 struct PackageHeader { //包头大小(sizeof(PackageHeader)) unsigned int uTransPack...
  • caoshangpa
  • caoshangpa
  • 2016年09月27日 16:35
  • 3267

TCP组包

MemoryStream MemoryStream; //此类内存字节流 int HEAD_LENGTH = 8; ...
  • wodownload2
  • wodownload2
  • 2016年07月16日 16:10
  • 277
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uart过来数据不够,组包
举报原因:
原因补充:

(最多只允许输入30个字)