ライブラリをRAMに配置する

テクニカル・ノート 200401

アーキテクチャ:

Arm, RH850, RISC-V, RL78, RX, STM8, SuperH

コンポーネント:

linker

更新日:

2020/06/29 9:45

はじめに

このテクニカルノートでは、ライブラリをRAMに配置する方法について説明します。

解説

TN_200401.zip (IAR Embedded Workbench for Arm 8.42.2でビルドされたプロジェクト)からサンプルプロジェクトをダウンロードして開いてください。

サンプルコード (TN_200401.zip) は、2つのプロジェクトを含みます:

  • Simplelib – グローバル配列と配列から値を返す関数を含むライブラリファイル (simplelib.a) をビルドします
  • Place Lib in RAM – ライブラリをRAMに配置し、ライブラリ関数を実行するデモプロジェクト。

To place the ライブラリ (simplelib.a) を RAMに配置するために、以下の手順を行ってください:

  1. ライブラリコード用 のRAMアドレス範囲をdefineする
define symbol region_RAM_CODE_start = 0x08010000;
define symbol region_RAM_CODE_end = 0x0801FFFF;

 

  1. ライブラリコード用のregion をdefine する
define region RAM_CODE_region = mem:[from region_RAM_CODE_start to region_RAM_CODE_end];

 

  1. ライブラリコード用のblock(RAMに配置される)をdefine してください。セクション選択ディレクティブは、ライブラリからコードコンテンツを収集し、セクション属性readwriteは、RAMから実行されるコードとしてリンクするようにリンカに指示します。
define block LIB {readwrite code object simplelib.a};

 

  1. ライブラリの初期化用のバイト用にblock (placed in ROMに配置される) を定義してください。 セクション選択ディレクティブは、ライブラリからすべての_initセクション(コードコンテンツ)を収集します。
define block LIB_INIT {readonly code section *_init object simplelib.a};

 

  1. initialize by copy ディレクティブによって、 instructs the linker to create *_init sections (ライブライからのコードコンテンツを含む) を生成し、ROMからRAMへのコピーを有効にし、スタートアップコードがブロックLIB_INITからブロックLIBにコードコンテンツをコピーするように調整するようリンカに指示します。
initialize by copy { readonly object simplelib.a };

 

  1. place in ディレクティブによって、 リンカにライブラリコードのブロックをRAMに配置するように指示します。
place in RAM_CODE_region { block LIB };

 

  1. place in ディレクティブによって、ライブラリの初期化バイト(コードコンテンツ)をROMに配置するようにリンカに指示します。
place in ROM_region { block LIB_INIT };

 

まとめ

ライブラリをRAMに配置するには、ライブラリ用にRAMに領域を定義し、ブロックLIBを定義してRAMに配置し、ブロックLIB_INITを定義してROMに配置し、最後にライブラリのコードコンテンツが起動時に ROMからRAMへコピーされるように準備します。

 

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

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