lwip环回调试笔记

lwip环回调试笔记

ID:10390019

大小:18.50 KB

页数:3页

时间:2018-07-06

lwip环回调试笔记_第1页
lwip环回调试笔记_第2页
lwip环回调试笔记_第3页
资源描述:

《lwip环回调试笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、没有上系统,lwip裸奔,raw/callback方式调用UDP函数通过环回接口自发自收。首先是移植,用户需要编写的文件有cc.h,perf.h,cpu.h,lwipopts.h,参考的是st官方代码和lwip的移植说明。然后stm32的时钟以及串口再加一个定时器配置好,串口输出调试信息,定时器周期更新ARPtable和维护TCPslow/fasttimer,最重要的是这里用到的环回接口需要周期性调用netif_poll这个函数,把环回接口中收到的数据递交给IP层。用伪代码描述一下出错的代码:St

2、m32时钟外设初始化;Lwip初始化;建立一个UDP客户端,绑定127.0.0.1,连接至UDP服务器;建立一个UDP服务器,绑定127.0.0.1;连接至UDP客户端;申请内存,把数据填至内存;While{周期调用tcp_tmr();周期调用etharp_tmr();周期发送数据udp_sendto();netif_poll();}结果是第一次发送和接收都正常,第二次开始就出错,经跟踪,到第二次发送前发现错误原因。首次发送,接收后申请的内存已释放,再次发送前必须再次申请内存且填充用户数据;改正后

3、Stm32时钟外设初始化;Lwip初始化;建立一个UDP客户端,绑定127.0.0.1,连接至UDP服务器;建立一个UDP服务器,绑定127.0.0.1;连接至UDP客户端;While{周期调用tcp_tmr();周期调用etharp_tmr();周期申请内存并填充数据,然后用周期发送数据udp_sendto()发送数据;netif_poll();}至此数据可以正常收发,但是还是高兴早了,程序跑了一会就停了,重启跑了一会又停了,发现每次都是收发223次后停止,开始怀疑是不是内存泄露了,排查中...

4、在周期申请内存后,检查是否申请成功,不成功打印输出信息;(单片机初学者没上过系统和协议栈,没有用过动态内存分配,这点常识没有,好羞愧。)果不其然,224次输出memoryerror找到问题所在了,就是内存泄露,但是哪里泄露呢?在Udp的接收处理回调函数里最后释放pbuf了呀,怎么回事,排查中...开始试探:每一次发送11个字节223次时内存不足;每一次发送196个字节75次时内存不足;一觉醒来,已经是第二天早上,用keil仿真,看内存区,的确是被占的满满的,开始跟踪调试...有重大发现,netif

5、_loop_output该函数会申请内存,并把用户数据赋值到其中,而后递交给IP进而UDP,最终至用户,我之前在回调函数里只是把netif_loop_output申请的内存给释放了,而我自个发送前申请的内存未释放,好了改代码如下:Stm32时钟外设初始化;Lwip初始化;建立一个UDP客户端,绑定127.0.0.1,连接至UDP服务器;建立一个UDP服务器,绑定127.0.0.1;连接至UDP客户端;While{周期调用tcp_tmr();周期调用etharp_tmr();周期申请内存并填充数据,

6、然后用周期发送数据udp_sendto()发送数据,发送完毕释放内存;netif_poll();}至此OK;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。