编程环境是:stm32cubeIde
原因:很多操作需要使用底层来做,比如中断时的上下文数据保存。也就是说用到汇编来实现。
疑问:c语言怎么才能跟汇编很好的兼容在一起呢?必将是我下一步的必经探索之路了。
一、C语言和汇编兼容格式
asm( 汇编字符串 : 输出约束字符串 : 输入约束字符串 : 可能被使用了的寄存器 );
汇编字符串:
"mov %[c] , r0 " "mov r0,r1" "add %[c] , %[a], %[b] "
输出约束操作(可以类比函数的返回值):
[c] "r"(c)
输入约束操作 (可以类比函数的参数):
[a] "r"(a), [b] "r"(b)
可能被使用了的寄存器 (有的地方叫被破坏了的寄存器):
"r0" "r1"
二、解释一下约束符
- 汇编代码字符串:包含ARM汇编指令的字符串。我们可以在该字符串中使用
%[name]
的形式来引用C语言变量。 - 输入约束:用于将C语言变量映射到ARM寄存器。输入约束的形式为
"约束代码"(变量名)
。例如,"r"(a)
表示将变量a
映射到一个通用寄存器。 - 输出约