以前发过一个帖子求助如何在進入中断后保护ARP的问题,一直没有解决现在我找到了解决的方法,跟大家分享下我的经验
我以前做中断保护是模仿C语言生成汇编的做法,把AR1做为栈指针进入中断后这样保护
退出的时候再依次恢复,这样的话存在一个问题如果在进入中断之前没用到其他辅助寄存器还恏,一旦用到其他寄存器就有可能出错比如我在进入中断之前在用AR2(AR2 = 0x80)也就是ARP = 2, 如果这时进入了中断那ST0,ACC等要保护的信息就覆盖了0x80, 0x81,0x82这些位置当退出中断时,0x80, 0x81,0x82这些位置的数据就被破坏了;如果进入中断时强制切换到AR1保护也就没意义了,ARP已经保护不了
现在我是这么做的,從0x60开始的一段地址做为栈区把数据依次保存到0x60开始的内存中,程序上可以这么实现
巧妙的地方就在于使用了SST这条指令当使用这条指令時,DP会强制变成0 但ST0中的DP不会变化,这样就不会破坏要保护的数据了具体可以查看CCS的帮助。