我有使用ARMASM编译的这部分代码:
/* Software Interrupt */
/* we must save lr in case it is called from SVC mode */
#define ngARMSwi( code) __asm { SWI code,{},{},{lr} }
使用示例: ngARMSwi(0x23);
我尝试使用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
感谢任何帮助!
答案 0 :(得分:1)
你可能想要
#define ngARMSwi(code) __asm__("SWI %0" : : "I"(code) : "lr")
请注意code
是指令的输入,因此它在第三部分中。它在实际中的位置由字符串中的%0
标记。 I
是code
的约束,表示它必须是8位常量。