问答

汇集网友智慧,解决技术难题

21ic问答首页 - 进中断时返回地址错误

进中断时返回地址错误

tp1332022-07-14
各位,我现在遇到一个奇怪的问题,我用的是dspic30f4011单片机,在运行中发现有些时候进入中断后,应该压入栈中的地址并不正确,通过排查,发现编译时如果出现类似于MOV W0, [W15]这样对以W15指向空间的内容操作就有几率出现,目前用DISI命令停止响应中断可以暂时解决问题,不过我用C语言编程,对W15指向空间的操作都是编译器编译的结果,涉及if语句for语句等。这种情况各位遇到过吗?有什么正常的解决方式吗?
回答 +关注 1
2333人浏览 2人回答问题 分享 举报
2 个回答
  • 你就用个DEMO来测试下,这种问题基本上百分百都是程序造成的,大部分都是因为堆栈内容被篡改导致的。
  • 这种情况我感觉是大部分是程序造成的。芯片一般不会出现这种设计缺陷的问题。压栈出栈 都是很成熟的东西
    tp133 2022-7-14 16:52 回复TA
    没错,我也认为是,当我把程序精简到只有一个for循环和一个定时器中断的时候还是出现这种情况,我在进中断的时候什么都没做直接检查压栈内容,结果该是地址的地方就是不对,里面的内容是中断发生时数据计算的临时结果,在这款单片机中W15一直指向可用的内存地址,函数计算的临时结果都存在那里,中断发生时应该是返回地址,结果不是,这就造成了中断返回错误。 

您需要登录后才可以回复 登录 | 注册