交叉编译asm错误

时间:2012-06-06 18:10:45

标签: gcc arm cross-compiling

我正在使用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) : );
}

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

2 个答案:

答案 0 :(得分:1)

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

以下是关于GCC“扩展ASM命令”的文档:

此链接也可能有所帮助:

============= ADDENDUM =============

另一个建议:

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

答案 1 :(得分:0)

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