This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我正在尝试弄清楚如何在中指定 clobber 寄存器
内联汇编代码段。 以下代码:
void foo (void) { __ASM__ volatile ( "MOV.b R9、R10" : : :“R10” ); }
…μ A 编译良好、可以使用我的提供的 gcc-msp430封装
分发(Ubuntu 16.04)、即使用以下命令:
msp430-gcc -c -mmcu=msp430f1611 foo.c
但是、当我尝试使用 TI 的编译器执行以下命令时:
$INSTALL_DIR/MSP430-gcc/bin/MSP430-elf-gcc -c -mmcu=msp430f1611 -L$INSTALL_DIR/MSP430-gcc/support-files/include/-i$INSTALL_DIR/msp430-gcc/support-files/include/foo.c -T msp430f1611.ld
我得到以下错误:
foo.c:在函数'foo'中: foo.c:5:5:错误:'asm'中未知的寄存器名称'r10' __ASM__ volatile ( ^~~~~~~μ A foo.c:5:5:错误:'ASM'中的未知寄存器名称'R9'
我出了什么问题? 我是否错过了文档中的内容
解释了为什么这些寄存器不能在 clobber 子句中使用?
提前感谢您的帮助。
您好!
要在 clobber 列表中指定寄存器、请使用大写的"R"表示寄存器名称。 因此、代码中的"R10"而不是"R10"。
GCC 发出的错误消息肯定会更清晰。 我们的目标是在未来的版本中对此进行改进。
此致、
是的、可以理解的是、当来自旧的 mspgcc 工具链时、预期语法的更改可能会令人困惑。 遗憾的是、在 asm 语句中只允许使用一种方法来指定特定的寄存器、由于工具链已经发布了几年、我们现在无法将其改回。
需要注意的是、Ubuntu 上的旧默认 mspgcc 工具链与 TI 发布的新 MSP430-GCC 工具链之间存在其他显著差异。 新的 MSP430-GCC 工具链遵循 MSPABI、而 mspgcc 工具链具有自己独特的 ABI。
《MSP430-GCC 用户指南》(slau646)的第6节"MSP430 GCC 和 MSPGCC" 提供了有关它们之间差异的一些其他详细信息、尤其是与调用惯例相关的信息。