2012-06-06 273 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