打印

进中断时返回地址错误

[复制链接]
4017|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tp133|  楼主 | 2022-7-14 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位,我现在遇到一个奇怪的问题,我用的是dspic30f4011单片机,在运行中发现有些时候进入中断后,应该压入栈中的地址并不正确,通过排查,发现编译时如果出现类似于MOV W0, [W15]这样对以W15指向空间的内容操作就有几率出现,目前用DISI命令停止响应中断可以暂时解决问题,不过我用C语言编程,对W15指向空间的操作都是编译器编译的结果,涉及if语句for语句等。这种情况各位遇到过吗?有什么正常的解决方式吗?

使用特权

评论回复

相关帖子

沙发
jack821119| | 2022-7-14 14:20 | 只看该作者
这种情况我感觉是大部分是程序造成的。芯片一般不会出现这种设计缺陷的问题。压栈出栈 都是很成熟的东西

使用特权

评论回复
评论
tp133 2022-7-14 16:52 回复TA
没错,我也认为是,当我把程序精简到只有一个for循环和一个定时器中断的时候还是出现这种情况,我在进中断的时候什么都没做直接检查压栈内容,结果该是地址的地方就是不对,里面的内容是中断发生时数据计算的临时结果,在这款单片机中W15一直指向可用的内存地址,函数计算的临时结果都存在那里,中断发生时应该是返回地址,结果不是,这就造成了中断返回错误。 
板凳
jack821119| | 2022-7-15 09:43 | 只看该作者
你就用个DEMO来测试下,这种问题基本上百分百都是程序造成的,大部分都是因为堆栈内容被篡改导致的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝