Skip to main content

IAR Embedded Workbench for Arm 9.70.x

シンボル制御ディレクティブ

このセクションの内容:
構文

EXTERN symbol [ ,symbol ] …

EXTWEAK symbol [ ,symbol ] …

IMPORT symbol [ ,symbol ] …

PUBLIC symbol [ ,symbol ] …

PUBWEAK symbol [ ,symbol ] …

REQUIRE symbol

パラメータ

symbol

インポートまたはエクスポートされるシンボル。

説明

これらのディレクティブは、モジュール間でシンボルがどのように共有されるかを制御します。

ディレクティブ

説明

EXTERN, IMPORT

外部シンボルをインポートします。

EXTWEAK

外部シンボルをインポートします。シンボルは定義できません。

OVERLAY

認識されますが、無視されます。

PUBLIC

他のモジュールにシンボルをエクスポートします。

PUBWEAK

他のモジュールにシンボルをエクスポートします。複数の定義が許可されます。

REQUIRE

シンボルを強制参照させます。

表147 シンボル制御ディレクティブ  


他のモジュールへのシンボルのエクスポート

1つ以上のシンボルを他のモジュールで使用できるようにするには、PUBLICを使用します。PUBLICとして定義されたシンボルは、再配置可能または絶対であり、(他のシンボルと同様の規則に従って)式の中で使用することもできます。

PUBLICディレクティブは、常に完全な32ビット値をエクスポートするため、8ビットプロセッサおよび16ビットのプロセッサ用のアセンブラでも可能なグローバル32ビット定数にすることができます。LOWHIGH>><< 演算子を使用することにより、このような定数の任意の部分を8 ビットまたは16 ビットのレジスタまたはワードに読み込むことができます。

1つのモジュールには任意の数のPUBLIC定義シンボルを使用できます。

複数の定義があるシンボルの他のモジュールへのエクスポート

PUBWEAKPUBLICと似ていますが、複数のモジュールで同じシンボルを定義できます。これらの定義のいずれか1つのみがリンカによって使用されます。シンボルのPUBLIC定義が含まれるモジュールが、同じシンボルのPUBWEAK 定義が含まれる1つ以上のモジュールにリンクされている場合、リンカはPUBLIC 定義を使用します。

注記

ライブラリモジュールへのリンクは、そのモジュール内のシンボルへの参照が行われ、シンボルがまだリンクされていない場合にのみ行われます。モジュール選択フェーズでは、PUBLIC定義とPUBWEAK定義は区別されません。つまり、PUBLIC定義の含まれるモジュールが選択されていることを確認するためには、これを他のモジュールより前にリンクするか、そのモジュール内で他のPUBLICシンボルへの参照が行われていることを確認する必要があります。

シンボルのインポート

型が設定されていない外部シンボルをインポートするには、EXTERNまたはIMPORTを使用します。

REQUIREディレクティブにより、シンボルが参照されているものとしてマーキングされます。コードが参照されなくても、シンボルを含むセクションをロードしなければならないときに、これは便利です。

次の例は、エラーメッセージを出力するサブルーチンを定義し、エントリアドレスerrをエクスポートして、他のモジュールから呼び出せるようにしています。メッセージは二重引用符に囲まれているため、文字列の後にはゼロバイトが挿入されます。

printは外部ルーチンとして定義されており、アドレスはリンク時に解決されます。

            name    errorMessage
            extern  print
            public  err

            section MYCODE:CODE(2)
            arm

err         adr     r0,msg
            bl      print
            bx      lr

            data
msg         dc8     "** Error **"
            end