是否有可能得到一個#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