搜索
bottom↓
回复: 13

[求助]lwip ping大包数据时(超过1458Byte)程序死到了HardFault_Handler

[复制链接]

出0入0汤圆

发表于 2014-12-13 16:03:33 | 显示全部楼层 |阅读模式
本帖最后由 guxingganyue 于 2014-12-14 12:18 编辑

移植好的lwip 1.4.1 ping少量的数据时正常,但是数据大于1458字节后,程序就死到了void HardFault_Handler(void)函数中


  1. <P>
  2. ping -f -l 1458 192.168.1.2  程序工作正常
  3. ping -f -l 1459 192.168.1.2  程序马上死</P>
复制代码

哪位帮我看看,哪里出问题了,谢谢

出0入0汤圆

 楼主| 发表于 2014-12-13 17:14:10 | 显示全部楼层
本帖最后由 guxingganyue 于 2014-12-14 12:15 编辑

自己顶起来,好像大家没有遇到这个情况???

出0入442汤圆

发表于 2014-12-14 19:53:58 来自手机 | 显示全部楼层
显然是你mtu限制,然后报包错误,进中断。这样你可以在中断里删除包,同时返回icmp包。详见ip协议,我不是砖家,只会一丁点。

出0入0汤圆

发表于 2014-12-14 20:01:54 | 显示全部楼层
三楼回复正确!呵呵。。。。。。。

出100入101汤圆

发表于 2014-12-14 21:23:23 | 显示全部楼层
lwip支持ping大包,好像是需要把ip分片功能启用。

出0入0汤圆

 楼主| 发表于 2014-12-15 12:43:38 | 显示全部楼层
本帖最后由 guxingganyue 于 2014-12-15 12:50 编辑
wye11083 发表于 2014-12-14 19:53
显然是你mtu限制,然后报包错误,进中断。这样你可以在中断里删除包,同时返回icmp包。详见ip协议,我不是 ...


问题已经解决,是我读数据时没有读下一包的缘故

但是现在测试发现用ATKKPING连续快速ping 0到1472字节时,系统有时就死到了assert loop中了

不知这是怎么回事



我测试过周立功的ZNE-100TL 就没有这个问题,很稳定

出0入0汤圆

 楼主| 发表于 2014-12-15 12:44:28 | 显示全部楼层
debian 发表于 2014-12-14 21:21
可能是内存 溢出了, 把 LWIP的内存 分配大一点

没有溢出,是读buffer读的有问题啊

出0入0汤圆

 楼主| 发表于 2014-12-15 12:45:13 | 显示全部楼层
fengyunyu 发表于 2014-12-14 21:23
lwip支持ping大包,好像是需要把ip分片功能启用。

大于1500字节后才分包的

出0入0汤圆

发表于 2014-12-15 18:33:28 | 显示全部楼层
1536以内不会分包的,建议看下你的Buffer是否开的正确,没有跨RAM区域,另外看看在哪里出的Hardfualt,打印一下。一般都是RAM开的太奇葩造成的。

出0入0汤圆

 楼主| 发表于 2014-12-15 19:13:49 | 显示全部楼层
magicoe 发表于 2014-12-15 18:33
1536以内不会分包的,建议看下你的Buffer是否开的正确,没有跨RAM区域,另外看看在哪里出的Hardfualt,打印 ...

mtu设置的是1500字节,我仿真发现,emac收到的字节数大于1500后超出的数据就存到下一个pbuf中了。



现在还遇到一个问题,我把ATKKPING的“忽略ping的时间间隔”打钩后,系统有时几十秒就死了,有时要1-2小时才死

这是怎么回事呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-12-15 21:24:29 | 显示全部楼层
guxingganyue 发表于 2014-12-15 19:13
mtu设置的是1500字节,我仿真发现,emac收到的字节数大于1500后超出的数据就存到下一个pbuf中了。

有用RTOS的话,把HEAP的使用情况打印一下。也可能是malloc不出来了,你Heap开了多大?使用编译器自带的内存管理机制还是用RTOS自带的?像FreeRTOS有3~4种HEAP管理方式,建议使用开个大数组的方式给Heap用RTOS自带的管理方式。这样安全些,我也一般这么做。 一家之言,仅供参考。我一直觉得编译器的内存管理机制大部分不好使,尤其是在使用RTOS的时候。很容易溢出啥的。

出0入0汤圆

 楼主| 发表于 2014-12-15 22:11:54 | 显示全部楼层
magicoe 发表于 2014-12-15 21:24
有用RTOS的话,把HEAP的使用情况打印一下。也可能是malloc不出来了,你Heap开了多大?使用编译器自带的内 ...

1、没有使用OS

2、堆栈分配情况如下图

3、可否用你的板子,用ATKKPING测试一下看看是否出现超时或死机呢?设置的参数为:忽略ping的时间间隔和永远ping打钩,数量量选用0到1472随机。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-12-16 00:44:53 | 显示全部楼层
guxingganyue 发表于 2014-12-15 22:11
1、没有使用OS

2、堆栈分配情况如下图

原来是1788啊,明天我试一下

出0入0汤圆

 楼主| 发表于 2014-12-16 19:45:23 | 显示全部楼层
magicoe 发表于 2014-12-16 00:44
原来是1788啊,明天我试一下

ls测试的效果如何?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 22:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表