我正在使用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) : );
}
我无法删除。 如果有人有任何想法,那么请善意解决
答案 0 :(得分:1)
也许在“r”和“(tmp”)之间加一个空格?
以下是关于GCC“扩展ASM命令”的文档:
http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended-Asm
http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit-Reg-Vars
此链接也可能有所帮助:
============= 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架构的一个问题。