rt-thread通过TCP连接(网络+shell)方式调用list_if()导致网络断开的问题分析

在使用rt-thread进行网络调试时,通过TCP连接而非串口调用list_if()可能导致网络挂断,表现为无法ping通。问题源于list_if()函数中缺少rt_enter_critical()锁,这期间netif链表可能出现变动。已将此BUG报告给rt-thread团队,建议关注其更新以获取解决方案。
摘要由CSDN通过智能技术生成

1.平常我们都是用串口的方式通过rt-thread的finish来调试,但是在遇到串口不够用或者板子没有焊串口。我们就需要通过网络+finish的方式来调试板子。但是在调试板子的时候发现通过通过TCP连接方式调用list_if()的时候,网络出现挂掉。现像是ping不通。

2.原因分析:后面查看list_if()的代码发现有这么一个代码:

void list_if(void)
{
    rt_ubase_t index;
    struct netif * netif;

    //rt_enter_critical();//进入临界断,调用锁

    netif = netif_list;

    while( netif != RT_NULL )
    {
        rt_kprintf("network interface: %c%c%s\n",
                   netif->name[0],
                   netif->name[1],
                   (netif == netif_default)?" (Default)":"");
        rt_kprintf("MTU: %d\n", netif->mtu);
        rt_kprintf("MAC: ");
        for (index = 0; index < netif->hwaddr_len; index ++)
            rt_kprintf("%02x ", netif->hwaddr[index]);
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值