2012-06-06 2 views
1

Я компиляции этой функции с помощью рычажного Linux-gnueabi-GCC, но он дает мне ошибку expected string literal before ‘)’ tokencrosscompiling ошибка ASM

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

который я не смог удалить. Если у кого-то есть идея, тогда любезно разрешите

ответ

0

Как я и ожидал, возникла проблема в использовании цепочки цепочек. Таким образом, ранее я использовал более старую версию, предоставленную программой codeourcery (2008), а затем перешел на 2010 toolchain.
Это может быть проблемой при изменении архитектуры ARM.

+0

эй, так как ты решил свою проблему? – linvenuza

+0

У более старой цепи кросс-стула IIRC есть ошибка, я обновил toolchain до 2010 года, что решило проблему. Надеюсь это поможет. – peeyush

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

Еще одна ссылка: http://hardwarebug.org/2010/07/06/arm-inline-asm-secrets/ – paulsm4

+0

Разделение пространства не работает. Каким-то образом это может быть связано с некоторыми версиями цепочки кросс-талонов? – peeyush

Смежные вопросы