我是靠谱客的博主 眼睛大宝马,这篇文章主要介绍调试lwip tcp udp的一些问题,现在分享给大家,希望可以做个参考。

操作系统:ecos, lwip 版本:1.1.1(ecospackagesnetlwip_tcpipv3_0ChangeLog

以TCP为例:

1. open命令操作包括:netconn_new()netconn_bind(),创建task,在其中netconn_connect(),然后循环中netconn_recv();

2. close 命令:netconn_delete(),删除open时的task,清除相关保存con的信息。

3. read命令,write命令。

问题主要在open和close。由于lwip对多任务支持不好,1.1.1版本的netconn_recv()一直阻塞在那里,碰到一些问题。

a. 当反复open, close时,一段时间后(测试open第64次时出错),netconn_recv(),但buf为null,conn->err不为OK,出现了tcp conn is error,error为-1。查看lwip代码,-1为ERR_MEM:out of memory error。出现该问题后,无法恢复,open一直是这个错误。lwip netconn_recv()代码中会memp_malloc(),这里个数为64个,所以open 64次后调memp_malloc()失败。

为了能够恢复,在出错时调用memp_inint(),测试可以恢复。

b. 当open命令后紧接着close,会出现无法响应命令。发现只要close发生在open中的netconn_recv之前,就会出现。原因是close后再netconn_recv(),这时阻塞住了。---lwip用于多任务时需注意。为了规避,在open时,等到netconn_recv()时再返回结果,要求只有等open返回结果才能调用close命令。这种情况测试udp时没有出现,原因netconn_connect()在tcp中建立连接会占用一定时间,不是立刻返回,可能导致close发生在netconn_recv之前。

c. tcp在建立连接时,对端不存在,需等一段时间才能返回错误。tcp需建立连接。

    udp这种情况立即返回ok。不需建立连接。虽然都调用了netconn_connect()。

下了lwip 1.3.2版本,支持netconn_recv()超时退出,修复了一些bug,后续有时间改为该版本调试。

最后

以上就是眼睛大宝马最近收集整理的关于调试lwip tcp udp的一些问题的全部内容,更多相关调试lwip内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(114)

评论列表共有 0 条评论

立即
投稿
返回
顶部