2012-06-06 157 views
1

我编译使用ARM-Linux的gnueabi-gcc的这个功能,但它给我一个错误 expected string literal before ‘)’ token交叉编译ASM错误

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

这我不能删除。 如果有人有任何想法,然后亲切解决

回答

0

正如我所料,使用crosstool-chain存在一个问题。因此,以前我使用的是codesourcery(2008)提供的较旧的一个,然后我转到2010工具链。
这可能是ARM架构发生变化的一个问题。

+0

嘿,你是怎么解决你的问题的? – linvenuza

+0

IIRC旧的crosstool-chain有一个bug,我更新了工具链到2010年,解决了问题。希望这可以帮助。 – peeyush

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 */ 
); 
} 
+0

另一个链接:http://hardwarebug.org/2010/07/06/arm-inline-asm-secrets/ – paulsm4

+0

按空格分隔不起作用。无论如何,这可能是某些crosstool链版本所特有的吗? – peeyush