关于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有什么关系吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-07-20 21:49
帮顶
txmsszd
2楼-- · 2019-07-21 00:36
 精彩回答 2  元偷偷看……
龙腾四野4
3楼-- · 2019-07-21 03:02
txmsszd 发表于 2016-6-28 10:04
你要看进入临界区宏定义

我看了,我是想问,汇编中把全局中断寄存器的值给了R0,,然后R0是怎么把值给CPU_sr的

一周热门 更多>