Возможно ли, чтобы значение целочисленного символа #defined было вставлено дословно в строковый литерал, который является частью раздела сборки в GCC (AVR Studio)?
Я хочу, чтобы "LEDS" был заменен на 48 внутри строкового литерала внутри блока asm() ниже.
#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 substitution и даже #include файлы с различными комбинациями значений и двойных кавычек и еще чего-то).
Я совсем не знаком с магией встраивания кода сборки AVR в компилятор AVR Studio GCC.
Я пытаюсь избежать наличия нескольких экземпляров литерала "48" в моем источнике, если препроцессор может выполнить эту замену для меня, что было бы здорово.
Изменить: это для микропрограммного прошивки - и просто для того, чтобы сделать жизнь интересной, почти нет свободного места для добавления нового кода.