是否有可能得到一个#defined 整数符号被逐字地插入到字符串文本中,该文字是GCC中的汇编部分的一部分(AVR工作室)?C宏 - 如何获得一个整数值到字符串文字
我想在下面的asm()块内的字符串文字中将“LEDS”替换为48。
#define LEDS 48 //I only want ONE mention of this number in the source
int x = LEDS; //I'm using the value directly too
void DrawFrame()
{
asm(
"ldi R27, 0x00 \n\t"
"ldi R26, 0x00 \n\t"
"ldi R18, LEDS \n\t" //<-- substitution needed here
...
}
但我希望编译器/汇编(预处理器做了之后它的工作)看到这...
#define LEDS 48 //I only want ONE mention of this number in the source
int x = LEDS; //I'm using the value directly too
void DrawFrame()
{
asm(
"ldi R27, 0x00 \n\t"
"ldi R26, 0x00 \n\t"
"ldi R18, 48 \n\t" //<-- substitution needed here
...
}
到目前为止,我已经尝试了所有的招数宏我能想到的( #stringification,arg替换,甚至#including具有各种值和双引号组合的文件以及什么)。
我完全不熟悉将AVR汇编代码内联到AVR Studio的GCC编译器中的魔力。
我试图避免在我的源文件中出现多次出现的“48”文字,如果预处理器可以对我进行这种替换,那会很棒。
编辑:这是一个微控制器固件项目 - 只是为了让生活变得有趣,几乎没有空余的空间来添加新的代码。
看看[放置一个预处理指令字符串文字内(http://stackoverflow.com/q/14721007/ 2305521) – fpg1503
为什么不进行字符串化和字符串连接? –
@CodyGray,字符串化不会“评估”你传入的内容,它只是取参数中的字符并将它们直接从vrbatim转储出来,除非在字符串化之前使用额外的宏来替换所需的字符。 – Wossname