OSCtxSwCtr++; /* Increment context switch counter */
OS_TASK_SW(); /* Perform a context switch */
}
}
}
OS_EXIT_CRITICAL();
}
OS_TASK_SW(); 之后什么时候恢复 PC 寄存器?如果马上恢复,那就跳转到别的任务了,
OS_EXIT_CRITICAL 不就被忽略了吗?
用的的函数有下面这些
#define OS_TASK_SW() OSCtxSw()
OSCtxSw
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ;触发PendSV异常 (causes context switch)
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
BX LR
#define OS_CRITICAL_METHOD 3 //进入临界段的方法
#if OS_CRITICAL_METHOD == 3
#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}
#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}
#endif
OS_CPU_SR_Restore
MSR PRIMASK, R0 ;读取R0到PRIMASK中,R0为参数
BX LR ;返回
在 PendSV_Handler 结尾有
CPSIE I ;开中断
还有,OSCtxSw 里面 POP {R4, R5},不是把刚刚 PendSV_Handler 对 R4-R11 的操作覆盖了吗?
谢谢~