1

我正在使用 arm-linux-gnueabi-gcc 编译此函数,但它给了我一个错误 expected string literal before ‘)’ token

void flush_icache(void)
{
  u32 tmp = 0;
  asm volatile(" mcr p15, 0, %0, c7, c5, 0\n\t": : "r"(tmp) : );
}

我无法删除。如果有人有任何想法,请解决

4

2 回答 2

1

也许在“r”和“(tmp”)之间放一个空格?

这是有关 GCC“扩展 ASM 命令”的文档:

此链接也可能有帮助:

============= 附录=============

另一个建议:

void flush_icache(void)
{
  u32 tmp = 0;
  asm volatile(
    " mcr p15, 0, %0, c7, c5, 0\n\t" 
    :             /* no output registers */
    : "r"(tmp)    /* input */
  );
}
于 2012-06-06T18:21:03.153 回答
0

正如我所料,使用 crosstool-chain 时出现了问题。所以以前我使用的是 codesourcery(2008) 提供的旧版本,然后我转移到 2010 工具链。
这可能是改变 ARM 架构的问题。

于 2012-06-10T05:51:20.113 回答