Other Parts Discussed in Thread:CC3200
如题,通过APP连接CC3200没有问题,很容易连接成功,但是APP往3200发送的数据总是丢失,这个很可能的原因的什么?
另外好像是刚启动的时候丢失严重,例如断电一天,今天早上来开机,连接后传输就总是有问题,
玩了很长时间后,数据传输正常了,这时候再重新连接、传输就比较容易成功!!!
Kevin Qiu1:
你是进行TCP数据发送还是UDP?用的哪个例程?
,
user1252639:
TCP
,
Kevin Qiu1:
这个可能是上电后需要重新建立tcp套字连接,大概多长时间后可以正常传输数据?
,
user1252639:
跟这个肯定没有关系,有问题的时候得N长时间吧,反正就是断开重启断开重启很多很多次,之前的板子都正常,这批板子经学出现这问题,
电路上只进行了一点改动,程序也只改动了一点,所以我不知道都有什么因素影响这个
,
Kevin Qiu1:
TCP传输数据相比UDP稳定许多,在软件层面出现丢包的因素可能是发送和接收过程的问题,比如发送频率过高,缓存区溢出等。
根据你的描述,应该不存在这个问题。你可以把程序下载到之前的板子,看是否有此问题,确定是硬件的问题还是软件的问题
,
user1252639:
程序好像有点影响,但我没觉得程序应该有什么影响啊,你帮我看下可以吗?
之前的程序主要部分:
void WirelessUltrasoundReceive(void * param)
{
lRetVal = sl_Recv(g_TcpSock.iNewSockDesc, (unsigned char *)&pCtrlDataBuff, MAX_CTRL_PACKET_SIZE, 0);int g_near, g_far;int TGC_Mid, TGC_tmp;unsigned char depthID;unsigned char *p;g_near = pCtrlDataBuff->data[0];g_near = 31-g_near;g_far = pCtrlDataBuff->data[1];depthID = pCtrlDataBuff->data[2];p = g_ConfigData+0xf000+(depthID<<8);TGC_Mid = *(p+255);TGC_Mid = *(p+TGC_Mid);pCtrlDataBuff = (struct ControlData *)g_SPIBuff;pCtrlDataBuff->header = 0xfe; //headerpCtrlDataBuff->len0 = 0x00; //lengthpCtrlDataBuff->len1 = 0x01; //lengthpCtrlDataBuff->cmd0 = 0x40; //cmdpCtrlDataBuff->cmd1= 0xf8; //cmdfor(i=0; i<*(p+255); i++){ //near fieldTGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_Mid+((TGC_tmp-TGC_Mid)*g_near>>5);}for(i=*(p+255); i<255; i++){ //far fieldTGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_Mid+((TGC_tmp-TGC_Mid)*g_far>>5);}pCtrlDataBuff->data[i] = pCtrlDataBuff->data[254];g_pCtrlDataBuff = (unsigned char *)pCtrlDataBuff;g_CtrlDataBuffLen = 261;StartSpiTx();}
改后:
void WirelessUltrasoundReceive(void * param)
{
lRetVal = sl_Recv(g_TcpSock.iNewSockDesc, (unsigned char *)&pCtrlDataBuff, MAX_CTRL_PACKET_SIZE, 0);int g_near, g_far;unsigned char depthID;unsigned char *p;unsigned char TGC_Mid, TGC_tmp;unsigned char bord1, bord2;unsigned char base_v;g_near = pCtrlDataBuff->data[0];g_near = 31-g_near;g_far = pCtrlDataBuff->data[1];depthID = pCtrlDataBuff->data[2];p = g_ConfigData+0xf000+(depthID<<8);TGC_Mid = *(p+255);bord1 = (unsigned char)(TGC_Mid>>1);base_v = *p;pCtrlDataBuff = (struct ControlData *)g_SPIBuff;pCtrlDataBuff->header = 0xfe; //headerpCtrlDataBuff->len0 = 0x00; //lengthpCtrlDataBuff->len1 = 0x01; //lengthpCtrlDataBuff->cmd0 = 0x40; //cmdpCtrlDataBuff->cmd1= 0xf8; //cmdif(base_v>15) {bord1 = bord1 + (TGC_Mid>>4);for(i=0; i<bord1; i++){TGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_tmp + g_near – 15;}for(i=bord1; i<TGC_Mid; i++){TGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_tmp + 15 – g_near;}for(i=TGC_Mid; i<255; i++){TGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_tmp + 15 – g_far;}}else{bord1 = bord1 + (TGC_Mid>>4);for(i=0; i<bord1; i++){TGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_tmp + (g_near>>1) – 7;}for(i=bord1; i<TGC_Mid; i++){TGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_tmp + 15 – (g_near>>1);}for(i=TGC_Mid; i<255; i++){TGC_tmp = *(p+i);pCtrlDataBuff->data[i] = TGC_tmp + 15 – (g_far>>1);}} pCtrlDataBuff->data[255] = pCtrlDataBuff->data[254];g_pCtrlDataBuff = (unsigned char *)pCtrlDataBuff;g_CtrlDataBuffLen = 261;StartSpiTx();}
其他部分完全一样,这能有什么影响啊????
,
Kevin Qiu1:
大概看了下,有些数据没有,无法确定移位操作后具体的含义。
原来定义的是整型,不知道有些有没有超出范围,你后面加的两个判断可能是导致异常的原因。
,
user1252639:
这个应该不会,原来是整形应该是可能出现负值,改后的不会出来负值,都是8位的无符号数,所以应该没有问题
另外就算超出范围,数据可能不是预想的值,但不至于网络出问题吧!
还有这个程序就是将APP发来的256个无符号数作一个变换,然后通过SPI发出去,移位加减就是一种变换
,
user1252639:
另外你说的发送速度,这个怎么控制?我怎么知道是不是APP那边发送的频率太快呢?APP里的发送是这样的,麻烦帮我看下,会过快吗?谢谢!!!
最开始的length 应该是远大于1024的
while (length != 0) { int size; if (length > 1024) { size = 1024; } else { size = length; } byte[] out = Arrays.copyOf(out_addr, out_addr.length + size); out[1] = (byte) (size & 0xff); out[2] = (byte) ((size >> 8) & 0xff); out[3] = (byte) (out[3] + i); System.arraycopy(out_d, index, out, out_addr.length, size); outputStream.write(out); outputStream.flush(); index = index + size;//数据总和 length = length – size;//剩余数据大小 i++; }
,
Kevin Qiu1:
你这个不存在频率过高的问题,受限于手机wifi