msp430 进入中断后修改堆栈内的PC值

GlHFsg 2013-06-29 10:46:28
430 进入中断先保存PC,SR然后保存R12~R15,我只在堆栈中修改了PC值,其他都没改,我调试了下可以跳转到指定函数运行,不过再往下运行就会出现各种错误。
...全文
208 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinerise 2013-07-06
  • 打赏
  • 举报
回复
在中断里修改PC,然后跳到指定函数,的确没任何问题,因为这是RTOS的最基本设计。至于跳到函数内部后执行错误,是因为你的上下文没有保存,堆栈没有恢复,跳到新的pfn后,堆栈还是原来的堆栈,上下文还是原来函数的上下文。开源免费的freertos有专门针对430的中断处理.s文件,你可以参考。
further_away 2013-07-02
  • 打赏
  • 举报
回复
基本上是楼上说的那样。 如果想细究,你可以看下中断跳转那部分的代码。 例如Cortex-M3,任务呗中断后 指向任务的堆栈(中断时已经把相关值入栈),跳转到了MSP去,堆栈完成后,将切换到任务堆栈,恢复现场。你自己通过修改PC跳转的话,现场没有被恢复,结果当然是异常的!
lbing7 2013-07-02
  • 打赏
  • 举报
回复
LZ可以参考一下部分实时系统里的移植文件 像UCOS,有现成的上下文切换的文件,看看人家是怎么做的
lr2131 2013-07-01
  • 打赏
  • 举报
回复
你在堆栈中修改PC是想干什么,想要做多线程还是什么? 中断中修改了保存在栈中的PC值,可以跳转到指定的函数,是,没错。但是,跳转到新的函数之后,栈指针可还是指向在中断前被打断的那个函数时用到的栈哦。你现在新函数是用的原来的函数的栈,里面运行时的寄存器全部都这样被“修改”了,原来的函数,其他的函数用的栈全部都乱套了,你的程序能不出问题嘛。 如果是想做多线程,可不单单是修改个栈里面的PC就够了,现场的保存和恢复你不做是不行的。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧