我使用以下汇编代码进入 ARM Cortex-M4 中的关键部分。 问题是,如何访问局部变量 primeMask?
volatile uint8_t primaskValue;
asm(
"MRS R0, PRIMASK n"
"CPSID i n"
"STRB R0,%[output] n"
:[output] "=r" (primaskValue)
);
asm 代码中的%[output]
字符串被替换为用于保存约束[output] "=r" (primaskValue)
指定的值的寄存器,该寄存器将成为之后用作 primaskValue 值的寄存器。 因此,在asm代码块中,该寄存器是primaskValue的位置。
如果您改用约束字符串"+r"
,那将是输入和输出(因此寄存器将使用 primaskValue 的先前值进行初始化,并用作输出值)
由于primaskValue
已被声明为volatile
因此这没有多大意义 - 根本不清楚volatile
对局部变量意味着什么(如果有的话)。