アセンブラソースでの絶対アドレスへの配置

テクニカル・ノート 17934

アーキテクチャ:

ARM

コンポーネント:

assembler

更新日:

2018/02/08 9:33

はじめに

このテクニカルノートでは、絶対メモリアドレスにアセンブラシンボルを配置する方法について説明します。

解説

アセンブラシンボルを絶対メモリアドレスに配置するには、次の2つの方法があります:

  • IAR Embedded Workbench for ARM バージョン7.40以降では、ASEGNディレクティブを使用してアセンブラデータを配置できます。
  • コードを配置するには、2つのアクションが必要です。まず、アセンブラソースコードで、コードラベルを名前付きセクションに関連付けます。 次に、リンク時にその名前付きセクションを絶対メモリアドレスに配置します。

このテクニカルノートに関するサンプルプロジェクト

TN_17934_test_project_IAR_Embedded_Workbench_for Arm_8_50_1.zip

ASEGN ディレクティブでのデータ配置:

ASEGN を使用して、メモリアドレス address に配置された名前付きセグメントを開始します。これは、定数データとリード/ライトデータの両方に使用できます。 例:

        ASEGN `.rodata`:CONST:NOROOT,08000H
        DATA
my_const:
        DC32 42

        ASEGN `.bss`:DATA:NOROOT,020008000H
        DATA
my_var:
        DS8 4

結果として my_const0x8000番地 に my_varは 0x20008000番地に配置されます。

リンク時に名前付きセクションに配置:

以下の2つの手順が必要です:

  • アセンブラソースで: アセンブラシンボルを名前付きセクションに関連付けます。
  • リンカ設定ファイルで: 名前付きセクションを絶対メモリアドレスに配置します。

以下例では、シンボル my_func はセクション .my_func_section に関連付けられています。

        PUBLIC my_func

        SECTION .my_func_section:CODE:NOROOT(1)
        THUMB
my_func:
        MOV      R0,#+32768
        LDR      R0,[R0, #+0]
        BX       LR               ;; return
        REQUIRE my_const

以下行をリンカ設定ファイル ファイルに追加すると、指定されたセクションは(リンク時に)絶対メモリアドレス0x00010000に配置されます。

define symbol __MY_CODE__   = 0x00010000;
place at address mem:__MY_CODE__ { readonly section .my_func_section };
 

まとめ

  • データの絶対アドレス配置はASEGN ディレクティブで行うことができます。
  • コードの絶対アドレス配置(データ用にも使用可能)は、2つのステップで実行されます。

全ての製品名は、それぞれの所有者の商標または登録商標です

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。