TI中文支持网
TI专业的中文技术问题搜集分享网站

以太网连续收数据是跳到dabort异常

最近做以太网这块的东西,按照wiki上面的例子,自己把locatorReceive这个函数里的接收buffer换了一个全局的比较大的变量(1024),在接收数据时连续接收后会跳到dabort异常(发现主程序不动了立即停止仿真),如果时间长了(没有立即停止仿真),程序会跳到undefEntry里面,这种情况应该怎么查找原因呢?

使用的是TMS570ls3137 pge的芯片,自己做的板子,发送是正常的,就是在连续接收数据的时候会出问题,请求指导下。

yong

Jay:

Hi yong,

请检查你的堆栈是否溢出。请加大堆栈再进行测试。

Regards,

Jay

yong zhang2:

回复 Jay:

加大哪一部分的堆栈呢?已经把IRQ部分的堆栈增加了,单步调试看这个堆栈没有溢出

今天把看门狗关掉了,然后发现程序会卡在以太网接收保护的IntMasterIRQDisable()这个例程中带的函数中一直死循环,调试窗口也只显示这一个函数,没有显示是通过哪个函数调用的,之前的dabort可能是由于加了看门狗,在这个地方触发了不可屏蔽中断造成的

主程序还有调用rti模块的中断,把这个中断关掉的话没有出现上面那个问题,怀疑是这个rti中断造成的影响,这个rti的中断服务程序中时关了中断的(_disable_interrupt_()),结尾时才打开中断,目前不清楚具体发生问题的原因是什么

Regards,

yong

yong zhang2:

回复 Jay:

刚才又测试了几次,发现程序又没在那卡着了。。。程序跳到了sys_core。asm中的_esmCcmErrorsClear_,然后一直循环很多遍,最后出现dabort异常,这是为什么呢?

yong zhang2:

回复 yong zhang2:

问题解决了,是以太网中断跟定时器中断禁用可能有冲突,具体原因不清楚,把定时器中断服务程序中的开、关中断关掉就正常了,十分感谢您的回复~

regards,

yong

Jay:

回复 yong zhang2:

Hi yong,

很高兴能看到问题得以解决。

从你提供的信息来看,还是觉得是由于堆栈溢出引起data abort的异常。

请问你的程序中,以太网中断和定时器中断有“嵌套”吗?

Regards,

Jay

yong zhang2:

回复 Jay:

应该是有的,从VIM中的优先级来看,定时器的中断优先级是比较高的,可能会发生中断的嵌套,定时器的中断服务程序很少的,有十来行代码吧,这样的话会在IRQ的堆栈中会溢出么?

Regards

yong

yong zhang2:

回复 Jay:

十分感谢您的提示,确实可能是这里的问题。

Regards,

yong

赞(0)
未经允许不得转载:TI中文支持网 » 以太网连续收数据是跳到dabort异常
分享到: 更多 (0)