2012-01-11 2 views
1

У меня есть эта часть кода, который был составителя использованием ARMASM:рядный ASM с НКУ

/* Software Interrupt */ 
/* we must save lr in case it is called from SVC mode */ 
#define ngARMSwi(code) __asm { SWI code,{},{},{lr} } 

пример использования: ngARMSwi (0x23);

Я пытаюсь преобразовать это, чтобы скомпилировать его с помощью gcc (code sourcery GCC-4.6.2 eabi). Я нашел эту ссылку http://www.ethernut.de/en/documents/arm-inline-asm.html, но я не могу найти способ скомпилировать эту строку правильно.

моя лучшая попытка является

#define ngARMSwi(code) __asm__ ("SWI " (code) : : :"lr") 

, но я получаю компиляции ошибка:

error: expected ':' or ')' before '(' token 

Любая помощь приветствуется!

ответ

1

Вы, вероятно, хотите

#define ngARMSwi(code) __asm__("SWI %0" : : "I"(code) : "lr") 

Обратите внимание, что code является ввод в инструкции, поэтому он идет в третьем разделе. Его место в instuction помечено %0 в строке. I является ограничением на code, указывая, что он должен быть 8-битной константой.

+0

Большое спасибо! Этот код компилируется ... Я просто должен убедиться, что он делает то же самое, что и раньше! –

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