简短版本:
我希望能够在macros.S
中定义汇编程序宏,并在GNU C中的asm()
语句中使用它们。
我可以使用靠近我的C源顶部的asm(".include \"macros.S\"");
执行此操作,但我希望macros.S
通过C预处理器。
长版:
在GCC asm中,*.S
文件由C预处理器预处理,允许使用C样式#define
等。
在GCC C中,您可以通过在文件顶部附近写.set
来包含asm头文件(可能包括asm宏定义,asm(".include \"myasmheader.S\"");
声明等)。
以这种方式包含ASM头文件允许您在asm块中使用asm宏。
不幸的是,这样做不会在包含的.S
文件上调用C预处理器(因为.include
在编译过程中稍后完成),因此#define
是没有的更长的替代。
那么有没有办法在C文件中正确包含.S
文件?
其他一些编译器支持:
#asm
#include "myasmheader.S"
#endasm
哪个不会出现这样的问题。但是,GCC似乎要求C文件中的所有asm都是字符串形式。
如果没有使用asm(不是选项,非常混合asm和c的嵌入式DSP项目),或者在ASM文件中删除C预处理器的使用,可以做些什么?