最近做以太网这块的东西,按照wiki上面的例子,自己把locatorReceive这个函数里的接收buffer换了一个全局的比较大的变量(1024),在接收数据时连续接收后会跳到dabort异常(发现主程序不动了立即停止仿真),如果时间长了(没有立即停止仿真),程序会跳到undefEntry里面,这种情况应该怎么查找原因呢?
使用的是TMS570ls3137 pge的芯片,自己做的板子,发送是正常的,就是在连续接收数据的时候会出问题,请求指导下。
yong
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
最近做以太网这块的东西,按照wiki上面的例子,自己把locatorReceive这个函数里的接收buffer换了一个全局的比较大的变量(1024),在接收数据时连续接收后会跳到dabort异常(发现主程序不动了立即停止仿真),如果时间长了(没有立即停止仿真),程序会跳到undefEntry里面,这种情况应该怎么查找原因呢?
使用的是TMS570ls3137 pge的芯片,自己做的板子,发送是正常的,就是在连续接收数据的时候会出问题,请求指导下。
yong
加大哪一部分的堆栈呢?已经把IRQ部分的堆栈增加了,单步调试看这个堆栈没有溢出
今天把看门狗关掉了,然后发现程序会卡在以太网接收保护的IntMasterIRQDisable()这个例程中带的函数中一直死循环,调试窗口也只显示这一个函数,没有显示是通过哪个函数调用的,之前的dabort可能是由于加了看门狗,在这个地方触发了不可屏蔽中断造成的
主程序还有调用rti模块的中断,把这个中断关掉的话没有出现上面那个问题,怀疑是这个rti中断造成的影响,这个rti的中断服务程序中时关了中断的(_disable_interrupt_()),结尾时才打开中断,目前不清楚具体发生问题的原因是什么
Regards,
yong
刚才又测试了几次,发现程序又没在那卡着了。。。程序跳到了sys_core。asm中的_esmCcmErrorsClear_,然后一直循环很多遍,最后出现dabort异常,这是为什么呢?
问题解决了,是以太网中断跟定时器中断禁用可能有冲突,具体原因不清楚,把定时器中断服务程序中的开、关中断关掉就正常了,十分感谢您的回复~
regards,
yong
Hi yong,
很高兴能看到问题得以解决。
从你提供的信息来看,还是觉得是由于堆栈溢出引起data abort的异常。
请问你的程序中,以太网中断和定时器中断有“嵌套”吗?
Regards,
Jay
应该是有的,从VIM中的优先级来看,定时器的中断优先级是比较高的,可能会发生中断的嵌套,定时器的中断服务程序很少的,有十来行代码吧,这样的话会在IRQ的堆栈中会溢出么?
Regards
yong
Hi yong,
如果你的中断全是IRQ的话,是不能出现嵌套了。只有FIQ才可能打断IRQ,出现嵌套。
建议在中断程序设置中,不要使用嵌套。
Regards,
Jay