1

C の #define に問題があります IAR EW 5.10 で MSP430F5418 を使用しています 指定されたセグメントに次の宣言変数を配置する location というプラグマがあります。以下の例では、a は myseg というセグメントに入れられますが、b は入れられません。

#pragma location="myseg"
 static const char a[] = "アンマ";
 static const char b[] = "アムリタ";

私はこのような定数をたくさん持っています。このようなことができるかどうか知りたい...

#define TYPE 場所="myseg" \
       static const char
#pragma TYPE a = "amma";
#pragma TYPE b = "アムリタ";
.....

#pragma location="myseg"各変数宣言の前に避けることができるよう に。

4

1 に答える 1

3

#pragmaa の中で aを使用することも、その逆も使用できません#define

この制限を回避するために、一部のコンパイラは、ディレクティブと同じ機能を提供する_Pragma演算子(GCC、LLVM) ( Visual C++ の場合) を提供しています。この演算子は、別のマクロで使用できます。コンパイラがそのようなプラグマ演算子をサポートしているかどうかを確認してください。__pragma#pragma

これを使用すると、次のように書くことができます。

#define DECLARE_IN_SEG(decl) \
    _Pragma(location="myseg") \
    static const char decl;

DECLARE_IN_SEG(a = "amma");
DECLARE_IN_SEG(b = "amrita");
于 2011-10-12T12:13:28.553 に答える