开启telnet后, 在msh中使用netstat指令, 程序进入死循环直至崩溃.
问题定位:
- 使用netstat指令会调用ethernetif.c中list_tcps()函数, 调用该函数时使用了rt_enter_critical(); 随后程序调用了rt_kprintf();

- 因为切换了telnet作为console, rt_kprintf()会引起telnet_write()调用, 该函数代码中使用了rt_mutex_take(telnet->tx_ringbuffer_lock, RT_WAITING_FOREVER);

- rt_mutex_take()函数会检查scheduler是否被锁, 实际上因为之前调用rt_enter_critical()已经将scheduler上锁, 会打印调试信息调用rt_kprintf.


- 至此死循环形成rt_kprintf -> telnet_write -> rt_mutex_take -> rt_kprintf->…死循环形成.
解决方法:
- 在list_tcps()中进入临界段后, 先将信息打印到buff, 退出临界段后, 将buff中的信息进行进行rt_kprintf. 目前尝试用这种方法解决.
- 解决telnet_write中rt_mutex_take使用问题.
其他:
在其他使用设备方式的代码中是否也存在类似问题, 需要考虑.
list_fd的修改代码有吗?我遇到了一样情况