This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3200数据丢失严重的问题

Other Parts Discussed in Thread: CC3200

如题,通过APP连接CC3200没有问题,很容易连接成功,但是APP往3200发送的数据总是丢失,这个很可能的原因的什么?

另外好像是刚启动的时候丢失严重,例如断电一天,今天早上来开机,连接后传输就总是有问题,

玩了很长时间后,数据传输正常了,这时候再重新连接、传输就比较容易成功!!!

  • 你是进行TCP数据发送还是UDP?用的哪个例程?

  • 这个可能是上电后需要重新建立tcp套字连接,大概多长时间后可以正常传输数据?
  • 跟这个肯定没有关系,有问题的时候得N长时间吧,反正就是断开重启断开重启很多很多次,之前的板子都正常,这批板子经学出现这问题,
    电路上只进行了一点改动,程序也只改动了一点,所以我不知道都有什么因素影响这个
  • TCP传输数据相比UDP稳定许多,在软件层面出现丢包的因素可能是发送和接收过程的问题,比如发送频率过高,缓存区溢出等。
    根据你的描述,应该不存在这个问题。你可以把程序下载到之前的板子,看是否有此问题,确定是硬件的问题还是软件的问题
  • 程序好像有点影响,但我没觉得程序应该有什么影响啊,你帮我看下可以吗?
    之前的程序主要部分:
    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; //header
    pCtrlDataBuff->len0 = 0x00; //length
    pCtrlDataBuff->len1 = 0x01; //length
    pCtrlDataBuff->cmd0 = 0x40; //cmd
    pCtrlDataBuff->cmd1= 0xf8; //cmd

    for(i=0; i<*(p+255); i++){ //near field
    TGC_tmp = *(p+i);
    pCtrlDataBuff->data[i] = TGC_Mid+((TGC_tmp-TGC_Mid)*g_near>>5);
    }
    for(i=*(p+255); i<255; i++){ //far field
    TGC_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; //header
    pCtrlDataBuff->len0 = 0x00; //length
    pCtrlDataBuff->len1 = 0x01; //length
    pCtrlDataBuff->cmd0 = 0x40; //cmd
    pCtrlDataBuff->cmd1= 0xf8; //cmd

    if(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();

    }
    其他部分完全一样,这能有什么影响啊????
  • 大概看了下,有些数据没有,无法确定移位操作后具体的含义。

    原来定义的是整型,不知道有些有没有超出范围,你后面加的两个判断可能是导致异常的原因。

  • 这个应该不会,原来是整形应该是可能出现负值,改后的不会出来负值,都是8位的无符号数,所以应该没有问题
    另外就算超出范围,数据可能不是预想的值,但不至于网络出问题吧!
    还有这个程序就是将APP发来的256个无符号数作一个变换,然后通过SPI发出去,移位 加减 就是一种变换
  • 另外你说的发送速度,这个怎么控制?我怎么知道是不是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++;
    }

  • 你这个不存在频率过高的问题,受限于手机wifi