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
{

}

}



      }

相关文章推荐

帮用户解决空间不够时候看的一个资料,【转】过来整理一下供大家参考:

RealView MDK具有强大的编译、链接功能。嵌入式设备拥有的资源往往有限,如果一个程序编译、链接之后的可执行文件大小略大于存储大小时,则不能生成可执行文件进行调试或固化到Flash中。在这种情况...

关于产品经理,看一遍不够,转载过来天天看。

【编者按】在IT界,许多人会称自己为菜鸟,而每只菜鸟都会有鹰的梦想。本文转载梁宁的微信公众号,作者认为,做产品即是做服务,她以ATM设计为例,详细地讲述了菜鸟级产品经理在面对服务时所思考的角度和描述。...
  • shamy
  • shamy
  • 2014年10月20日 19:32
  • 388

别老扯什么Hadoop了,你的数据根本不够大

本文原名“Don't use Hadoop when your data isn't that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过...

别老扯Hadoop蛋了,你的数据根本不够大(有点搞笑)

本文原名“Don’t use Hadoop when your data isn’t that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过...
  • xtjsxtj
  • xtjsxtj
  • 2013年11月19日 17:05
  • 1141

杭电OJ 1205 WA的产生可能由于数据类型不够大

Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一...

数据不够大,别玩深度学习?正反双方撕起来了

数据不够大,别玩深度学习?正反双方撕起来了 2017-06-07 13:06 李林 问耕 发自 凹非寺 量子位 报道 | 公众号 QbitAI 争论,随时可能爆发。 ...

数据不够大,别玩深度学习?

网上看的一篇文章,量子位报道的,看着挺有意思的,copy了下来。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uart过来数据不够,组包
举报原因:
原因补充:

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