用gcc

2012-01-11 20 views
1

聯彙編我有這是使用ARMASM編譯代碼這一部分:使用用gcc

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

例如: ngARMSwi(0×23);

我嘗試將其轉換爲使用gcc編碼(代碼源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是輸入指令,如此這般的第三部分。它在教學中的位置由字符串中的%0標記。 I是對code的約束,表明它必須是8位常量。

+0

非常感謝!這個代碼編譯...我只需要確保它和之前一樣! – 2012-01-11 21:39:45