LWIP裸机跑网口一段时间后死机了

项目场景:

ZYNQ 7010运行LWIP网口,得到数据,进行处理


问题描述:

lwip网口发送数据到主机处理之后,待机运行一段时间(几分钟不等,有时候立即死机,有时候隔一会儿),程序死机,中断也不能执行。上电未发送网口数据,程序待机运行,并不会死机。


原因分析:

一开始发送的数据为处理某段内存,涉及到操作PL端的某个寄存器,怀疑此寄存器有问题,后单独设立例程验证,此寄存器没有问题,随后查询其他地址问题,无果,是否由于其他外部引起?为何需要每次通讯一次才会死机?后来,删除DSP的PwmCtrl_v1_0文件夹,程序运行正常,怀疑PwmCtrl有问题,细想之下,没有道理


解决方案:

重新梳理程序框架流程,网口数据传输过来之后,涉及到内存操作,以及操作PL端寄存器,莫非是DDR地址不对?查看官方文档
LWIP裸机跑网口一段时间后死机了_第1张图片
程序中,DDR地址没有问题,流程继续往下走,想起来在系统上电初始化时,程序连接了一些数据表,数据表是采用固定地址,刚好与DDR段的地址有部分重合,查看lscript.ld文件,
LWIP裸机跑网口一段时间后死机了_第2张图片

而我速度表中的地址刚好在此应用程序地址范围内,sdram地址与应用程序自动分配的地址重叠使用,导致系统出错,扑街了,怪不得会执行一下数据处理(涉及一部分缓存操作),之后就会死机。
解决办法是修改lscript.ld文件,adram地址自行使用定义为50M,那么就是从0x1000000x33FFFFF,修改起始地址为0x3400000,修改ddr大小从0x1FF00000变为0x1CC00001,数据表的地址为0x1000000x33FFFFF之间的地址,避开重叠使用即可。
LWIP裸机跑网口一段时间后死机了_第3张图片

你可能感兴趣的:(单片机,嵌入式硬件)