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]);
rt_kprintf("\nFLAGS:");
if (netif->flags & NETIF_FLAG_UP) rt_kprintf(" UP");
else rt_kprintf(" DOWN");

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

被折叠的 条评论
为什么被折叠?



