我在使用ARM的IAR编译器Cortex-M4进行内联汇编时遇到了问题。下面是我的问题的一个简单示例;将以下代码放在一个名为test.c的文件中
void irqrestore(int flags)
{
asm volatile(
"tst %0, #1\n"
"bne 1f\n"
"cpsie i\n"
"1:\n"
:
: "r" (flags)
: "memory");
}现在尝试使用IAR编译器进行编译:
$ iccarm --thumb test.c
IAR ANSI C/C++ Compiler V6.40.2.53884/W32 for ARM
Copyright 1999-2012 IAR Systems AB.
asm volatile(
^
"C:\home\NuttX\nuttx\test.c",6 Error[Og010]: Inline assembler instruction
does not have a unique size: " bne ?1_0"
Errors: 1
Warnings: none你知道哪里出问题了吗?如果我将"bne 1f\n“改为"bne 1\n",它编译得很好,但我不确定它是否正确。
发布于 2014-05-22 03:25:19
答:从IAR那里,我被告知(并已确认)以下语法是正确的:
"bne.n 1f\n"或者在上下文中:
void irqrestore(int flags)
{
asm volatile(
"tst %0, #1\n"
"bne.n 1f\n"
"cpsie i\n"
"1:\n"
:
: "r" (flags)
: "memory");
}https://stackoverflow.com/questions/23788286
复制相似问题