(2)不可屏蔽中断的中断向量为0xFFFC。响应不可屏蔽中断时,硬件自动将OFIE、NMIE、ACCVIE复位。软件首先判断中断源并复位中断标志,接着执行用户代码。退出中断之前需要置位OFIE、NMIE、ACCVIE,以便能够再次响应中断。需要特别注意点:置位OFIE、NMIE、ACCVIE后,必须立即退出中断相应程序,否则会再次触发中断,导致中断嵌套,从而导致堆栈溢出,致使程序执行结果的无法预料。
最后一句"需要特别注意点:置位OFIE、NMIE、ACCVIE后,必须立即退出中断相应程序,否则会再次触发中断,导致中断嵌套,从而导致堆栈溢出,致使程序执行结果的无法预料。“怎么理解
Triton Zhang:
置位OFIE,NMIE,ACCVIE之后,MCU就可以继续相应非屏蔽中断。由于非屏蔽中断享有最高的中断优先级,它会打断当前的中断(保存当前状态入栈,这时由于程序仍然处于中断状态,原来进中断之前保存的状态仍然在堆栈里面),重新进入非屏蔽中断向量,如此反复执行,就会造成堆栈溢出。
为了防止这个问题,所以要求立即退出中断程序,其实就是让堆栈恢复,腾出地方让非屏蔽中断再次进入。
lin xiaolong:
回复 Triton Zhang:
哦,嗯。请问是不是这个意思,当进入不可屏蔽中断时,保存当前状态入栈,置位OFIE,NMIE,ACCVIE后如果不退出中断,就会再次进行当前状态的压栈。