关于UCOS2的临界区的问题

2019-07-20 21:33发布

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有什么关系吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。