ZYNQ裸机跑LWIP,频繁收发,时间一长就会死机问题解决
ZYNQ裸机跑LWIP,频繁收发,时间一长就会死机问题解决
问题描述:
前阵子已经调试好数据收发,在去老化跑硬件的时候,发现数据频繁收发久了会死机,当时第一反应就是lwip的内存泄漏,或者指针跑飞,但到底是哪个地方,重现概率又很小,着实头秃.网上查阅资料
但是也看到了说1.4版本以上这个bug被官方修复完毕,而我用的lwip版本是2.1.1,理论上不会再出现指针自己指向自己的问题,但我不甘心,跟着楼主操作一番
发现果然不是这个地方的问题,参考了一下大多数人都是开线程上轮询的办法来获取网口数据,而我是采取中断的方式获取数据,难道是中断的问题?后来静下心来满满定位问题,发现每次都是在发送数据的时候翻车的,有头绪了。
原因分析:
我是在裸机上跑的lwip,数据接收由回调函数处理,回调函数已经涉及到tcp_recved,而tcp_recved包含了tcp_output,同时,lwip的定时器里面在跑一个的tcp_slowtmr,tcp_slowtmr里面也有tcp_output,在我传输数据时,主程序中由于数据需要立即回复,所以我的每一个tcp_write后面都跟着一个tcp_output,这就造成了tcp_output很有可能在执行一半的时候被打断,也就是重入了,查看tcp_output
前面省略。。。。
后面省略。。。。
定位每次都是执行到tcp_output_segment之后就被打断重入了,下面一段代码
显然,重入之后,再执行回原点位置开始执行的话,指针数据会跑飞。
解决方案:
其实tcp_output这个函数就是把tcp_write写入缓存的内容立即发送出去,如果被重入了,那么先跳出来即可,后面定时器跑的tcp_slowtmr也会把需要发送的数据再发送出去,重入的数据并不会被丢弃,所以我在tcp_output函数开始的地方添加锁,结束的地方解锁,如果有重入数据进来,那么直接退出去就好了。
以上仅个人记录
ZYNQ裸机跑LWIP,频繁收发,时间一长就会死机问题解决相关推荐
- LWIP裸机跑网口一段时间后死机了
项目场景: ZYNQ 7010运行LWIP网口,得到数据,进行处理 问题描述: lwip网口发送数据到主机处理之后,待机运行一段时间(几分钟不等,有时候立即死机,有时候隔一会儿),程序死机,中断也不能 ...
- putty连接centos/Ubuntu一段时间无操作无法输入 死机 断线解决办法
解决办法比较简单: PuTTY设置,putty -> Connection -> Seconds between keepalives ( 0 to turn off ),默认为0,改为5 ...
- 在ZYNQ上裸机跑ARM程序的演示
今天给大家演示如何在ZYNQ上,裸机跑ARM程序,本测试用的是米尔Z-turn Board单板,测试代码用的XILINX官方的C语言测试程序,用于测试挂接在ARM总线上的设备是否正常,并在串口终端打印 ...
- 在ZYNQ上裸机跑ARM程序演示
今天给大家演示如何在ZYNQ上,裸机跑ARM程序,本测试用的是米尔Z-turn Board单板,测试代码用的XILINX官方的C语言测试程序,用于测试挂接在ARM总线上的设备是否正常,并在串口终端打印 ...
- ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)
ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能) 之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实 ...
- 频繁GC (Allocation Failure)及young gc时间过长分析
序 本文主要分析一个频繁GC (Allocation Failure)及young gc时间过长的case. 症状 gc throughput percent逐步下降,从一般的99.96%逐步下降,跌 ...
- 【跑飞、死机】单片机 msp430程序跑飞原因和解决方式积累
目录 单片机 msp430程序跑飞原因和解决方式积累 MSP430 数组填充越界引起的栈溢出 导致程序跑飞 [单片机重启]MSP430重启/频繁重启/跑飞 原因分析 单片机 msp430程序跑飞原因和 ...
- 第五人格每天服务器维护多长时间,第五人格:每天玩的时间并不长,大概一天1-5局...
原标题:第五人格:每天玩的时间并不长,大概一天1-5局 我玩提琴,开门战,剩一个医生一个祭司,医生上挂,祭司倒地没自起.然后我就逛街赏景去了.走着走着发现,唉,祭司怎么起来了,医生也下来了,唉,传送还 ...
- spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案...
1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...
最新文章
- 在EditText前面添加一个搜索的小图片
- android 添加安装权限白名单
- php in方法,PHP函数in_array()使用详解
- python 有效的括号
- ssd3 employee.java_SSD3Panswers icarnegie ssd3的所有答案~十分齐全 - 下载 - 搜珍网
- gdb的简单使用和gdb+gdbserver方式进行ARM程序调试
- VS2012 +OpenCv2.4.4配置
- LeetCode 1391. 检查网格中是否存在有效路径(BFS)
- SQL-必知必会-触发器
- Spring ROO初体验
- poj 1088(记忆化搜索)
- Windows 10 之修改登录背景(Win10BGChanger)
- 英国大概率退出欧盟!
- linux db2v9.7卸载,db2 卸载和安装
- 3.1_21 JavaSE入门 P20 【正则】Pattern模式类、Matcher匹配器、元字符、分组捕获、反向引用
- 离线地图瓦片下载工具
- POJ 3345 Bribing FIPA 树上背包
- Android NDK SO库隐藏内部符号表
- linux的htb队列,Linux流量控制中的HTB队列创建与过滤(2)
- win10出现“以太网没有有效的ip配置”的问题