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

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

FAQ詳細情報

ID 10810610
FAQカテゴリ(大) リンカ
最終更新日 2014-01-18

質問内容

TN73964: アプリケーション全体を (Cortex-M3の) RAMへダウンロードし動かす (v.6.50.5+)

回答内容

EWのターゲット : ARM
EWのコンポーネント : 一般
キーワード : RAM
更新日 : April 26, 2013

 

アプリケーション全体を RAM で動かす。

制約事項
この記事は C-SPY デバッガでダウンロードする場合にのみ有効です。スタンドアロンでRAM動作させたい場合は、テクニカルノート 11578 (下のリンク) をご参照ください。


背景
この記事は、アプリケーション全体を RAM にロードしとRAM上で実行するためのステップです。
• RAMに配置されるデータ (読み出し/書き込みデータと定数) とコード.を作成します。
• ベクターテーブルをRAMに配置します。( Cortex-M により強制される最小アラインメント.)
• 立ち上げプログラム中で VTOR をベクターテーブルの先頭にセットします。

 

お勧めするソリューション
いくつか方法があります。(ここで紹介する方法はそのうちの一つです)

 

CODEとDATAをRAMに配置します。

• プロジェクトメニュー > オプション > リンカ > 設定タブを選択し
□デフォルトをオーバライド
にチェックを入れ、(使用する .icf ファイルのディレクトリに切り替えてから) 編集ボタンをクリックすると、リンカ設定ファイルエディタが開きます。
• メモリ領域タブを選択 - RAM/開始 をコピーし、この値を ROM/開始にペーストし、RAM/終了をコピーし、この値をROM/終了にペーストします。


CODE、DATA、ベクタが RAM に配置されているか確認します。
プロジェクトをビルドします。
• .map ファイルを調べてベクターテーブル(シンボル名は __vector_table ) が RAM の 2^7 にアラインメントされたアドレスに設定されていることを確認します。
• 変更が必要な場合は、リンカ設定ファイルエディタを開き「ベクタテーブル」タブを開き、
• RAMの 2^7 (0x20000000 番地に設定すると良いでしょう) のアラインメントに乗ったアドレスに変更します。


VTOR を RAM に設定
VTOR (Vector Table Offset Register) を RAM上の Vector Table (シンボル名は __vector_table ) に設定します。
• \arm\src\lib\low_level_init.c をプロジェクトにコピーします。
(ファイルが書き込み禁止になっているので書き込み可能に変更します)
• レジスタ VTOR のアドレス情報を得るため、使用しているデバイス用の #include行を追加します。
• ベクタテーブルの宣言
extern int __vector_table[];
を追加します。
• 関数 __low_level_init の中で、VTOR を __vector_table のアドレスに設定します。これは、
VTOR = (unsigned int) & __vector_table;
で設定できます。


テスト
プロジェクトをビルドします。
• シミュレータにダウンロードします。
VTORがRAM上のベクタテーブルのアドレスに設定されていることを確認します。
• シミュレータからハードデバッガに変更します。
• RAM にダウンロードし、アプリケーションを実行します。

 

サンプルプロジェクト
 STM32F103ZE用のサンプルプロジェクトが下のリンクにあります。

 

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

参考資料URL