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

[复制链接]
3151|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

粉丝
快速回复 在线客服 返回列表 返回顶部