连接可靠性方法



  • 您好,我在使用RAK439进行大数据量传送时,发现中途与路由的连接断开了。结果模块没法检测到与路由的断开。硬件是STM32F429,使用硬件SPI,波特率12.5M。开启了UDPClient(1个),TCPClient(1个),UDPServer(1个)。传送的文件大概是20MB左右。应用层协议是我们自己定义的,用TCP传送,UDPSERVER是用于接收广播数据,让PC连接设备用的,UDPCLIENT用于其他测试(暂示使用)。调试断点,没发现有断开路由的标志。


  • administrators

    路由器断开是会有断开事件的。你是OS还是NOS?
    0_1515149560996_upload-eabe3707-20d6-46c7-9b1b-cd15530ace98



  • 谢谢管理员的回复。我这边是不带操作系统的。刚才跟踪了错误发生点,我这边可能没说清楚,我这里是用上位机UDPClient发送广播数据,用来获取设备列表。程序上我跟踪到
    if (app_demo_ctx.ludps_sockfd == INVAILD_SOCK_FD)
    {
    if((ret =RAK_UdpServer(25002)) >= 0)
    {
    app_demo_ctx.ludps_sockfd = ret;
    DPRINTF("RAK_UdpServer sockfd = %u creat \n",app_demo_ctx.ludps_sockfd);
    }else{
    DPRINTF("RAK_UdpServer creat failed code =%d\n", ret);
    return;
    }
    }

    这个创建UdpServer的函数返回-14,查了一下资料是bind失败了。TcpServer那边也是这个情况。RW_ERR_CMD_PENDING --socket is blocked, wait last cmd response;这是-14的解析
    这个错误的产生是因为我在快速传数据的时候,上位按了一下断开连接。结果就这样了。
    现在问题是,如果遇到这种情况,该如何复活?



  • TcpServer是在Select这个函数上出错,返回的是RW_ERR_CMD_PENDING


  • administrators

    你为什么要在断开连接后还要创建UDP和TCP?



  • 说一下我这边的功能需求吧。
    1、设备创建一个UdpServer用来收到PC发来的广播数据包,用于告诉PC机,本设备的存在。
    2、设备创建一个TCPServer,该TcpServer是用于正常的数据通讯

    上面的代码是官方给出的tcp udp的demo


  • administrators

    这样的应用建议使用OS的代码。



  • 我想知道这个BLOCK是什么原因?还有除了复位驱动之外,有没有其他办法保证通讯恢复。
    如果跑上OS是优化了哪些地方?


  • administrators

    RAK439本身就不适合NOS的应用,要随时调用rw_sysDriverLoop来保证设备的状态更新,因此建议使用OS,因为OS可以设置一个任务专门调用rw_sysDriverLoop。



  • 如果上了OS,rw_sysDriverLoop是中断唤醒任务中调用吗?


  • administrators

    不是,如果你使用了OS 的库,那么我们库内部就会建立一个任务处理rw_sysDriverLoop,因此你只需要按照我们的OS的示例代码编写你的应用就可以。



  • 如果不跑OS,有没有其他模块选择,接口还是SPI。平均速度要求200KB/S的。


  • administrators

    你可以选择我们的RAK411模块。SPI接口的2Mb/s速度。


登录后回复
 

与 RAK支持中心 的连接断开,我们正在尝试重连,请耐心等待