カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810785
FAQカテゴリ(大) リンカ
最終更新日 2019-12-03

質問内容

関数をまとめてRAM上に配置したいときは

回答内容

FAQ作成対象製品:EWARM  バージョン:v6.30.1以降

ある特定の関数をRAM上に配置する方法はいくつかあります。

__ramfuncを使用した方法や#pragma locationを使用した方法などが下記のURLにありますILNKガイド内に紹介されています。

https://www.iar.com/globalassets/2/ew_ilinkguide.jpn_20131006.pdf

 

今回は特定の範囲にある関数をまとめて任意のセクションに所属させる方法をご紹介します。

1.ソースファイルの編集

任意のセクションに所属させたいいくつかの関数が含まれる範囲をdefault_function_attributesで囲みます。

#pragma default_function_attributes = @ "MYSEC"

int func1(){..}

int func2(){..}

#pragma default_function_attributes =

この操作により関数func1とfunc2がセクションMYSECに登録されました。

2.リンカ設定ファイルの編集

リンカ設定ファイル(.icf)をエディタで開き、次の3つの作業を行います。

 

 

(1)initializeの設定変更

 

 

      initialize by copy { readwrite };

とある個所を

  initialize by copy { readwrite, ro section MYSEC };

    に書き換えます。

 

(2)コピー元ROM領域の指定

リンカ設定ファイルに定義済みの、ROM領域のリージョン名を調べます。

ここでは、"ROM_region"だったとします。

リンカ設定ファイルの最後に次の1行を追加します。

  place in ROM_region { section MYSEC_init };

 

(3)コピー先RAM領域の指定

リンカ設定ファイルに定義済みの、RAM領域のリージョン名を調べます。

ここでは、"DRAM_region"だったとします。

リンカ設定ファイルの最後に次の1行を追加します。

place in DRAM_region { section MYSEC };

3.リンカマップの確認

 

 

 

 

プロジェクトオプションの「リンカ」カテゴリの「リスト」タブで

「リンカマップファイルの表示」にチェックを入れます。

メイクを実行しエラーがなければリンカマップが生成されています。

GUIのワークスペース中のOutputファイルグループを開き、

.mapの拡張子のファイルをダブルクリックするとリンカマップが表示されます。

ENTRY LISTの表示の中から、リンクしたライブラリの関数名を探し、

その関数がRAMのアドレスに配置されていることを確認します。

 

以上

 

 

 

 

 

参考資料URL