求助:Cortex-M3任务上下文切换。
上下文切换函数大概:
void CTX_Swap(TContext **ppContext1,TContext **ppContext2)
{
SAVE_CONTEXT(); //保护寄存器
*ppContext1=SP; //记录SP到*ppContext1
SP=*ppContext2; //从*ppContext2读取新的SP
RESTORE_CONTEXT();//回恢复寄存器
}
需要解决的问题:
如果要实现上下文切换函数,即可能在中断中调用,也可能在非中断中调用,该如何实现。
疑问1:哪些寄存器需要入栈保护?
APSR,IPSR,EPSR,MSP,PSP这些寄存器如何处理?
疑问2:CM3核如何识别是中断返回,而不是一般函数返回?
当发生中断时,CM3自动保护某些寄存器,正常情况下,退出中断,这些寄存器自动恢复。
现在假设,中断中调用上下文切换函数,从pContext1切换到pContext2,
而当加载pContext2的SP后,碰到调用返回时,CM3核会不会错误当做中断返回,错误地从SP中多出栈寄存器?
|