FAQ~よくある質問~ | FAQマスタ詳細表示
FAQ詳細情報
ID | 10810913 |
---|---|
FAQカテゴリ(大) | リンカ |
最終更新日 | 2016-01-01 |
質問内容
TN27661: 定数データをバンクアプリケーションのバンクに格納する。
回答内容
ターゲット: 8051
コンポーネント リンカ
公開 2005/11/25 14:25
概要
8051用 IAR C/C++ Compiler は Cソースから生成されたバンク・コード、すなわち、CODEセグメントのみサポートします。また、バンク切り替えは データアクセスではなく C関数からの呼び出しで行われます。ただし、ツールに自信があって管理する自信があるなら、データにアクセスするとき、バンク切り換えは必要ありませんこれは、コードと同じバンクに定数データを置くことによって行われます。
以下の手順に従います。
1) バンクにアクセスする関数のある、同じ C ソースモジュールに定数を宣言します。
2) #pragma memory=constseg(CONST1) を使用して、const vars をユーザセグメント CONST1 に配置します。注意定数文字列は、#pragma と一緒に配置できません。代わりに、コンパイル後 XLIB を使用して、現在のモジュールの CSTR セグメントを CSTR1にリネームします。
3) ソースファイルを -RCODE1 オプションでコンパイルしコードセグメントの名前を CODE1 にします。
4) ステップ 2) - 3) を、固定データをアクセスする必要のある、それぞれのモジュールで繰り返しますが、CONST1、CODE1 は CONST2、CODE2、... となります。
5) アプリケーションを通常通りリンクしますが、バンクオプションはそれぞれのCONSTn がCODEn と対応するようにします。これは、 -b(CODE)CONST1,CODE1:CONST2,CODE2: ... : CODE = ...... で可能です。
「 : 」は、バンクを切り替えるのに使用します。 IAR Linker and Library Tools Reference Guide を参照してください。もちろん、いくつかの CONSTn, CODEn の組は同じバンクに入ると思いますが、 バンクに十分な空きがありバンクを効果的に使用しているかどうかマップファイルで調べる必要があります。
メモ
このテクニカルノートは、8051 用 Embedded Workbench バージョン 7.20がリリースされた時点の2005 年に書かれました。上記の実装の詳細のいくつかは、以降変更がある可能性があります。
全ての製品の名前は、それぞれの所有者の商標または登録商標です。
参考資料URL
-
http://supp.iar.com/Support/?note=27661
英文Technical Note