lwip环回调试笔记.doc_第1页
lwip环回调试笔记.doc_第2页
lwip环回调试笔记.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

没有上系统,lwip裸奔,raw/callback方式调用UDP函数通过环回接口自发自收。首先是移植,用户需要编写的文件有cc.h,perf.h,cpu.h,lwipopts.h,参考的是st官方代码和lwip的移植说明。然后stm32的时钟以及串口再加一个定时器配置好,串口输出调试信息,定时器周期更新ARP table和维护TCP slow/fast timer,最重要的是这里用到的环回接口需要周期性调用netif_poll这个函数,把环回接口中收到的数据递交给IP层。用伪代码描述一下出错的代码:Stm32时钟外设初始化;Lwip初始化;建立一个UDP客户端,绑定127.0.0.1,连接至UDP服务器;建立一个UDP服务器,绑定127.0.0.1;连接至UDP客户端;申请内存,把数据填至内存;While周期调用tcp_tmr();周期调用etharp_tmr();周期发送数据udp_sendto();netif_poll(); 结果是第一次发送和接收都正常,第二次开始就出错,经跟踪,到第二次发送前发现错误原因。首次发送,接收后申请的内存已释放,再次发送前必须再次申请内存且填充用户数据;改正后Stm32时钟外设初始化;Lwip初始化;建立一个UDP客户端,绑定127.0.0.1,连接至UDP服务器;建立一个UDP服务器,绑定127.0.0.1;连接至UDP客户端;While周期调用tcp_tmr();周期调用etharp_tmr();周期申请内存并填充数据,然后用周期发送数据udp_sendto()发送数据;netif_poll(); 至此数据可以正常收发,但是还是高兴早了,程序跑了一会就停了,重启跑了一会又停了,发现每次都是收发223次后停止,开始怀疑是不是内存泄露了,排查中.在周期申请内存后,检查是否申请成功,不成功打印输出信息;(单片机初学者没上过系统和协议栈,没有用过动态内存分配,这点常识没有,好羞愧。)果不其然,224次输出memory error找到问题所在了,就是内存泄露,但是哪里泄露呢?在Udp的接收处理回调函数里最后释放pbuf了呀,怎么回事,排查中.开始试探:每一次发送11个字节 223次时内存不足; 每一次发送196个字节 75次时内存不足;一觉醒来,已经是第二天早上,用keil仿真,看内存区,的确是被占的满满的,开始跟踪调试.有重大发现,netif_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();周

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论