打印

求助:Cortex-M3任务上下文切换

[复制链接]
2019|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LPC300|  楼主 | 2010-2-19 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助: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中多出栈寄存器?

相关帖子

沙发
六楼的窗户| | 2010-2-19 17:15 | 只看该作者
这个太难了,呼唤高手?

使用特权

评论回复
板凳
LPC300|  楼主 | 2010-2-24 16:12 | 只看该作者
自己顶,难道就没有高手了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:30——驱动高手、流利的英语

107

主题

525

帖子

0

粉丝