CH579的TCP_Server例程CH57xNET_SetSocketTTL设置报错 mStopIfError: 17

CH579的例程 NET部分TCP_Server例程测试遇到如下问题,像是内存设置问题?

接口封装的很简洁,说明文档也很简单。。。。(文档很重要)


希望大神帮助解答下,未知报错挺可怕的


image.png


int main(void) 

{

    UINT8 i = 0;

    SystemClock_UART1_init();                                                   /* 系统时钟和串口1初始化 */  

    i = CH57xNET_LibInit(IPAddr,GWIPAddr,IPMask,MACAddr);                       /* 库初始化 */

    mStopIfError(i);                                                                    /* 检查错误 */   

    PRINT("CH57xNETLibInit Success\r\n");   

    Timer0Init( 10000 );                                                /* 初始化定时器:10ms */

    NVIC_EnableIRQ(ETH_IRQn);

    while ( CH57xInf.PHYStat < 2 ) {                                   

    DelayMs(50);

}

    CH57xNET_CreatTcpSocket();                                             /* 创建TCP Socket */

    PRINT("CH579 TCP server create!\r\n");   

    while(1)

    {

        CH57xNET_MainTask();                                                    /* CH57xNET库主任务函数,需要在主循环中不断调用 */

        if(CH57xNET_QueryGlobalInt())CH57xNET_HandleGlobalInt(); /* 查询中断,如果有中断,则调用全局中断处理函数 */

    }

}


//DelsyMs(50);

订正:

DelayMs(50); 


int main(void) 

{

    UINT8 i = 0;

      

    SystemClock_UART1_init();                                                     /* 系统时钟和串口1初始化 */  

    i = CH57xNET_LibInit(IPAddr,GWIPAddr,IPMask,MACAddr); /* 库初始化 */

    mStopIfError(i);                                                                        /* 检查错误 */

    PRINT("CH57xNETLibInit Success\r\n");   

    Timer0Init( 10000 );                                                    /* 初始化定时器:10ms */

    NVIC_EnableIRQ(ETH_IRQn);

    while ( CH57xInf.PHYStat < 2 ) {DelayMs(50);}

    CH57xNET_CreatTcpSocket();                                                  /* 创建TCP Socket */

    PRINT("CH579 TCP server create!\r\n");   

    while(1)

    {

        CH57xNET_MainTask();                                                    /* CH57xNET库主任务函数,需要在主循环中不断调用 */

        if(CH57xNET_QueryGlobalInt())CH57xNET_HandleGlobalInt();    /*中断标志查询执行*/

    }

}


 工程编译没问题,报错不变

image.png



您好,根据打印信息,应该在创建Socket时出错,检查下Socket参数是否合法。


感谢Archer,您说的对,我仔细检查了下;


问题更正:根据打印是CH57xNET_SetSocketTTL处报错 ,设128也是一样报错,应该跟参数没关系,是内部函数实现问题?

另外,NET.LIB封装的DHCP协议中hostname不能设置,这个函数或定义给增加下怎么样j_0011.gif,设备名unknow不太精致



image.png


#define RECE_BUF_LEN 536

UINT8 IPAddr[4] = {192,168,0,200};                /* CH579IP地址 */
UINT8 GWIPAddr[4]=  {192,168,0,1};                /* CH579网关 */
UINT8 IPMask[4] = {255,255,255,0};                /* CH579子网掩码 */
UINT8 DESIP[4] =  {192,168,0,102};               /* 目的IP地址 */
UINT8 SocketId;                          /* 保存socket索引,可以不用定义 */
UINT8 SocketRecvBuf[4][RECE_BUF_LEN];               /* socket接收缓冲区 */

void CH57xNET_CreatTcpSocket(void)
{
   UINT8 i;                                                             
   SOCK_INF TmpSocketInf;                   /* 创建临时socket变量 */

   memset((void *)&TmpSocketInf,0,sizeof(SOCK_INF));      /* 库内部会将此变量复制,所以最好将临时变量先全部清零 */
   memcpy((void *)TmpSocketInf.IPAddr,DESIP,4);        /* 设置目的IP地址 */
   TmpSocketInf.SourPort = 2000;               /* 设置源端口 */
   TmpSocketInf.ProtoType = PROTO_TYPE_TCP;          /* 设置socekt类型 */
   TmpSocketInf.RecvStartPoint = (UINT32)SocketRecvBuf;    /* 设置接收缓冲区的接收缓冲区 */
   TmpSocketInf.RecvBufLen = RECE_BUF_LEN ;         /* 设置接收缓冲区的接收长度 */
   i = CH57xNET_SocketCreat(&SocketId,&TmpSocketInf);     /* 创建socket,将返回的socket索引保存在SocketId中 */
   mStopIfError(i);                       /* 检查错误 */
      PRINT("CH57xNET_SocketCreat finish\r\n");
#ifdef  KEEPLIVE_ENABLE
   CH57xNET_SocketSetKeepLive( SocketId, 1 );        /* 开启socket的KEEPLIVE功能(V06版本支持) */
#endif

   i = CH57xNET_SocketListen(SocketId);           /* TCP连接 */
   mStopIfError(i);                      /* 检查错误 */
   PRINT("CH57xNET_SocketListen finish\r\n");
   i = CH57xNET_SetSocketTTL( SocketId,10 );
   mStopIfError(i);                      /* 检查错误 */
   PRINT("CH57xNET_SetSocketTTL finish\r\n");
}





抱歉,这里17是十六进制,错误代码,0x17,错误如下:

image.png

这里TCP Server模式下,初始化的时候打开的是侦听端口,这里不应该设置TTL,TCP链接建立后才能设置,这个例程我们会修正。

请将这段设置TTL代码屏蔽使用。




j_0002.gif了解了,谢谢大佬。


也碰到同样问题


TCP Server  在 HandleSockInt    中

if(initstat & SINT_STAT_CONNET)

{

    SetSocketTTL();

}


也是失败,同样报0x17


注意HandleSockInt函数里的socketid参数和CH57xNET_SetSocketTTL()函数里的socketid参数,连接对象要保持一致。


只有登录才能回复,可以选择微信账号登录