#整数シンボルの値を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の置換、さらに値と二重引用符などのさまざまな組み合わせを含むファイルも含む)。
私はAVR StudioのGCCコンパイラにAVRアセンブリコードをインライン化する魔法に慣れていません。
プリプロセッサが私にこのような置換を実行することができれば、私のソースには "48"というリテラルが複数回現れるのを避けようとしています。
編集:これはマイクロコントローラのファームウェアプロジェクト用であり、人生を面白くするために、新しいコードを追加する余裕がほとんどありません。
はhttp://stackoverflow.com/q/14721007/([文字列リテラル内のプリプロセッサディレクティブを配置する]を見てください2305521) – fpg1503
文字列化と文字列連結が機能しないのはなぜですか? –
@CodyGray、stringificationはあなたが渡したものを "評価"せず、文字列化の前に余分なマクロを使用しない限り、引数内の文字を単純にvrbatimから抜き出します。 – Wossname