理论上没问题,只要你利用好堆栈中保存的返回地址,以及处理好现场恢复的问题就行。其实,操作系统中的抢占式多任务的任务切换也是这么做的。
不过我觉得你更应该从程序算法上找办法去避免那个死循环,这才是正确的思路与方向。
关于补充:直接reti的话肯定是返回到被定时器中断的地方,但是你可以先从堆栈中弹出定时中断压入的返回地址以及保护现场所压入的内容,这样堆栈就恢复成死循环那个中断的状态了(要保证定时器中断发生在死循环中,否则就乱套了,可以通过标志加以判断),这时你再执行reti,就相当于死循环那个中断的返回了。
其实还有更简单的办法:进入死循环那个中断这后立即将SP保存到一个内存变量中,定时器中断中判断发生了死循环,就将那个变量的值再恢复给SP,然后执行reti。当然该方法要求中断服务程序是不可重入的,这对单片机来说一般不是问题。
最后,再一次提醒你,死循环是不对的,应该从这方面多想想解决办法。上面的回答只是针对你的问题提供一个思路而已。