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有什么关系吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我看了,我是想问,汇编中把全局中断寄存器的值给了R0,,然后R0是怎么把值给CPU_sr的
一周热门 更多>