WCH沁恒单片机
直播中

哈哈哈

9年用户 752经验值
擅长:可编程逻辑
私信 关注
[问答]

CH579的TCP_Server例程CH57xNET_SetSocketTTL设置报错mStopIfError: 17怎么解决?

CH579的例程 NET部分TCP_Server例程测试遇到如下问题,像是内存设置问题?
接口封装的很简洁,说明文档也很简单。。。。(文档很重要)

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





int main(void)
{
    UINT8 i = 0;
    SystemClock_UART1_init();                                                   /* 系统时钟和串口1初始化 */  
    i = CH57xNET_LibInit(IPAddr,GWIPAddr,IPMask,MACAddr);                       /* 库初始化 */
    mStopIfError(i);                                                                    /* 检查错误 */   
    PRINT("CH57xNETLibInit Success
");   
    timer0Init( 10000 );                                                /* 初始化定时器:10ms */
    NVIC_EnableIRQ(ETH_IRQn);
    while ( CH57xInf.PHYStat < 2 ) {                                   
    DelayMs(50);
}
    CH57xNET_CreatTcpSocket();                                             /* 创建TCP Socket */
    PRINT("CH579 TCP server create!
");   
    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
");   
    Timer0Init( 10000 );                                                    /* 初始化定时器:10ms */
    NVIC_EnableIRQ(ETH_IRQn);
    while ( CH57xInf.PHYStat < 2 ) {DelayMs(50);}
    CH57xNET_CreatTcpSocket();                                                  /* 创建TCP Socket */
    PRINT("CH579 TCP server create!
");   
    while(1)
    {
        CH57xNET_MainTask();                                                    /* CH57xNET库主任务函数,需要在主循环中不断调用 */
        if(CH57xNET_QueryGlobalInt())CH57xNET_HandleGlobalInt();    /*中断标志查询执行*/
    }
}


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



  

回帖(2)

罗敏

2022-8-17 09:50:40
您好,根据打印信息,应该在创建Socket时出错,检查下Socket参数是否合法。
举报

王雪

2022-8-17 09:51:01
问题更正:根据打印是CH57xNET_SetSocketTTL处报错 ,设128也是一样报错,应该跟参数没关系,是内部函数实现问题?
另外,NET.LIB封装的DHCP协议中hostname不能设置,这个函数或定义给增加下怎么样,设备名unknow不太精致







#define RECE_BUF_LEN 536UINT8 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 finishrn");#ifdef  KEEPLIVE_ENABLE   CH57xNET_SocketSetKeepLive( SocketId, 1 );        /* 开启socket的KEEPLIVE功能(V06版本支持) */#endif   i = CH57xNET_SocketListen(SocketId);           /* TCP连接 */   mStopIfError(i);                      /* 检查错误 */   PRINT("CH57xNET_SocketListen finishrn");   i = CH57xNET_SetSocketTTL( SocketId,10 );   mStopIfError(i);                      /* 检查错误 */   PRINT("CH57xNET_SetSocketTTL finishrn");}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分