初级会员

- 积分
- 160
- 金钱
- 160
- 注册时间
- 2015-10-23
- 在线时间
- 19 小时
|
5金钱
ucos中用#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();} 进入临界段; 用#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);} 退出临界段;
汇编中是这样写的:
OS_CPU_SR_Save
MRS R0, PRIMASK ; 读取 PRIMASK 到 R0(保存全局中断标记,除了故障中断)
CPSID I ; PRIMASK=1,关中断
BX LR ; 返回, 返回值保存在 R0
OS_CPU_SR_Restore
MSR PRIMASK, R0 ; 读取 R0 到 PRIMASK 中(恢复全局中断标记), 通过 R0 传递参数
BX LR
汇编中将当前 PRIMASK寄存器的值保存到了R0,然后关闭全局中断 ; 在c语言宏定义中cpu_sr = OS_CPU_SR_Save(); 将当前值保存到cpu_sr 这个变量中,我就是这里不明白,汇编中
把寄存器值给了R0,那么R0又是怎么把值给cpu_sr的??R0和cpu_sr有什么关系吗?
|
|