硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1804|回复: 3
收起左侧

[RL-TCPnet] TCPnet+ucos程序拔网线后死机

[复制链接]

3

主题

4

回帖

13

积分

新手上路

积分
13
发表于 2021-7-23 17:41:57 | 显示全部楼层 |阅读模式
大佬们,我这程序开机连上发送数据都是好的能正常收发,但是拔了网线之后程序就跳到OS_TickListInsert里面跑死循环了。这是为什么啊
回复

使用道具 举报

3

主题

4

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2021-7-23 17:43:07 | 显示全部楼层
用的是TCP客户端的例程移植到项目里的
回复

使用道具 举报

3

主题

4

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2021-7-23 17:46:00 | 显示全部楼层
void TCPnetTest(void)
{  
        int32_t iCount;
        uint8_t *sendbuf;
        static uint8_t tcp_status;
        uint16_t maxlen;
        int i,index;
        uint8_t j;
        OS_ERR       err;
        CPU_TS             ts;
        OS_FLAGS     xResult;
        const uint16_t usMaxBlockTime = 10; /* 延迟周期 */
        static u8 res;
        init_ethernet();
        init_TcpNet();
        dhcp_disable ();
        ip_config.IpAdr[0]=net_var.local_ip_addr[0];
        ip_config.IpAdr[1]=net_var.local_ip_addr[1];
        ip_config.IpAdr[2]=net_var.local_ip_addr[2];
        ip_config.IpAdr[3]=net_var.local_ip_addr[3];
        ip_config.NetMask[0]=255;
        ip_config.NetMask[1]=255;
        ip_config.NetMask[2]=255;
        ip_config.NetMask[3]=0;
       
        ip_config.DefGW[0]=192;
        ip_config.DefGW[1]=168;
        ip_config.DefGW[2]=1;
        ip_config.DefGW[3]=1;
        ip_config.PriDNS[0]=194;
        ip_config.PriDNS[1]=25;
        ip_config.PriDNS[2]=2;
        ip_config.PriDNS[3]=129;
        ip_config.SecDNS[0]=194;
        ip_config.SecDNS[1]=25;
        ip_config.SecDNS[2]=2;
        ip_config.SecDNS[3]=130;
        mem_copy ((U8 *)&localm[NETIF_ETH], (U8 *)&ip_config, sizeof(ip_config));
        /*
           创建TCP Socket并连接,客户端连接服务器后,10秒内无数据通信将断开连接。
           但是由于这里使能了TCP_TYPE_KEEP_ALIVE,会一直保持连接,不受10秒的时间限制。
        */
    socket_tcp = tcp_get_socket (TCP_TYPE_CLIENT | TCP_TYPE_KEEP_ALIVE, 0, 10, tcp_callback);
        if(socket_tcp != 0)
        {
                res=tcp_connect(socket_tcp, net_var.aim_ip_addr, net_var.port_num, net_var.port_num);
        }
        OSFlagCreate ((OS_FLAG_GRP  *)&FLAG_TCPnet,
                  (CPU_CHAR     *)"FLAG TCPnet",
                  (OS_FLAGS      )0,
                  (OS_ERR       *)&err);
        while (1)
        {
                main_TcpNet();
               
                tcp_status = TCP_StatusCheck();                //用于网线插拔的处理
                xResult = OSFlagPend ((OS_FLAG_GRP  *)&FLAG_TCPnet,
                                                        (OS_FLAGS      )0x01,
                                                        (OS_TICK       )usMaxBlockTime,
                                                        (OS_OPT        )OS_OPT_PEND_FLAG_SET_ANY +OS_OPT_PEND_BLOCKING,
                                                        (CPU_TS       *)&ts,
                                                        (OS_ERR       *)&err);               
                if((err == OS_ERR_NONE)&&(tcp_status == __TRUE))
                {       

                        iCount = tcp_SendLen;
                                do
                                {
                                        main_TcpNet();
                                        if (tcp_check_send (socket_tcp) == __TRUE)
                                        {
                                                maxlen = tcp_max_dsize (socket_tcp);
                                                iCount -= maxlen;
                                               
                                                if(iCount < 0)
                                                {
                                                        maxlen = iCount + maxlen;
                                                }
                                               
                                                sendbuf = tcp_get_buf(maxlen);
                                                memcpy(sendbuf,tcp_Sendbuf,tcp_SendLen);
                                               
                                                tcp_send (socket_tcp, sendbuf, tcp_SendLen);
                                                OSFlagPost ((OS_FLAG_GRP  *)&FLAG_TCPnet,
                                                                        (OS_FLAGS      )0x01,  
                                                                        (OS_OPT        )OS_OPT_POST_FLAG_CLR,
                                                                        (OS_ERR       *)&err);                       
                                        }               
                        }while(iCount > 0);
                }
                OSTimeDly(1, OS_OPT_TIME_DLY, &err);       
        }
}
/*
*********************************************************************************************************
*        函 数 名: NetSendData
*        功能说明: TCP发送数据并等待发送完毕
*        形    参: cod 数据指针,len 数据长度
*        返 回 值: 无
*********************************************************************************************************
*/
void NetSendData(char *cod,u16 len)
{
        OS_ERR       err;
        CPU_TS             ts;
        const uint16_t usMaxBlockTime = 5000; /* 延迟周期 */
       
        tcp_Sendbuf = cod;
        tcp_SendLen = len;
               
        OSFlagPost ((OS_FLAG_GRP  *)&FLAG_TCPnet,
                                        (OS_FLAGS      )0x01,  
                                        (OS_OPT        )OS_OPT_POST_FLAG_SET,
                                        (OS_ERR       *)&err);       
       
        OSFlagPend ((OS_FLAG_GRP  *)&FLAG_TCPnet,
                                  (OS_FLAGS      )0x01,
                                  (OS_TICK       )usMaxBlockTime,
                                  (OS_OPT        )OS_OPT_PEND_FLAG_CLR_ANY + OS_OPT_PEND_BLOCKING,
                                  (CPU_TS       *)&ts,
                                  (OS_ERR       *)&err);
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2021-7-23 18:32:58 | 显示全部楼层
uCOS配TCPnet由于不是原装的,接口函数的地方处理的不太好,你方便的话,使用RTX测试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 10:34 , Processed in 0.156072 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表