BUG:对GD427工程进行模块裁剪、改变数据结构(存储在CCMRAR)后,网口不能被ping通

BUG描述
对GD427工程进行模块裁剪、改变数据结构(存储在CCMRAM)后,网口不能被ping通。
BUG原因
1.数据结构改了,但是对应的flash变量存储区,没有更新,导致从flash读出得用户数据错误,ip往后偏移了三个字节。其中0xC0 0xA8 0x01 0x64 = 192.168.1.100,从而导致ip地址错误。
error:

normal:

2.由于删除了大量得模块和文件,编译器链接时对大量 .o 文件进行重新分配了内存,使得与网络相关得驱动代码被随机分配在了CCMRAM内存中,但是CCMRAM内存不能被DMA使用,而网口包含了DMA外设。


从 .map文件可以看出,两个网络相关的数组缓存(在stm32f4x7_eth.c文件中被定义)被随机的分到了.bss段中。

从 .sct 文件中可以看到,stm32f4x7_eth.o文件并没有被指定分配到哪一个内存区域中,所以在重新裁剪许多模块之后,编译器对现有模块重新进行了随机的分配,将stm32f4x7_eth.o分配到了CCMRAM中,导致了网口不能ping通。
修复方法
原因1.使用keil软件对flash进行 全部 的擦除,重新烧录程序,更新flash
原因2.给stm32f4x7_eth.o指定正常内存。

posted @   Charles_hui  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示