ucosii的中断服务子程序,邵老师的书中这么写的:
用户中断服务子程序:
保存CPU寄存器; 1
调用OSIntEnter; 2
用户代码; 3
调用OSIntExit; 4
恢复CPU寄存器; 5
执行中断返回指令; 6
Cortex-M3在进入异常时自动压栈,返回时自动出栈。所以上面的1、5、6步是CUP自动执行的。
现在有个问题:自动压栈和自动出栈的栈并不是u/cosii所分配的任务堆栈,而是内核指定的堆栈,假如第四步调用OSIntExit;的时候进行了任务调度,(假设被中断的是任务1,调度后的是任务2)
这时运行的是任务2,如果这时又要调度运行任务1,需要将任务1的堆栈恢复到CPU寄存器,但发生中断时并没有把任务1压到任务1的堆栈,这时恢复任务1 的堆栈到CPU会出错
这个怎么解决啊?求大神指导