定数データをバンクアプリケーションのバンクに格納する
テクニカル・ノート 27661
アーキテクチャ:
8051
コンポーネント:
linker
更新日:
2018/08/08 8:25
はじめに
IAR C/C++ Compiler for 8051は、Cのソースによって生成されたコードのバンキングのみサポートします。すなわち、CODEセグメントとバンキングの切り替えは、データアクセス時ではなく、C関数の呼び出し時のみ行われます。ただし、ツールの使い方を熟知しており、これを管理できる自信がある方は、データアクセス時のバンクの切り替えを不要にすることができます。それには、コードとそのコードからアクセスされる定数データを同じバンクに配置します。
以下の手順を実行します。
- 定数にアクセスする関数が定義されているCソースモジュールと同じ場所で、その定数を宣言します。
- #pragma memory=constseg(CONST1)を使用して、ユーザが名前をつけたセグメントであるCONST1に定数変数を配置します。注: #pragmaを使用して定数文字列を配置することはできません。定数文字列を配置するには、コンパイル後にXLIBを使用して、現在のモジュールにあるCSTRセグメントの名前をCSTR1に変更します。
- -RCODE1オプションをつけてソースをコンパイルし、コードセグメントにCODE1という名前を与えます。
- 定数データにアクセスする必要がある各モジュールについて、手順2~3を繰り返します。ただし、CONST1、CODE1の次はCONST2、CODE2というように、手順を繰り返すたびに番号を増やしてください。
- 通常通りアプリケーションをリンクします。ただし、各CONSTnが対応するCODEnと同じバンクに配置されるように、バンキングオプションを変更してください。これを実現するには、-b(CODE)CONST1,CODE1:CONST2,CODE2: ...: CODE = ......のように指定します。
ここで、:はバンクの切り替えを表します。IAR Linker and Library Tools Reference Guideを参照してください。もちろん、CONSTnとCODEnからなる複数のペアを同じバンクに収めることができますが、その場合、マップファイルをチェックして、バンクに十分な空きがあるか、バンクを効率よく使用できるかどうかの確認が必要です。
注
本テクニカルノートは、2005年にIAR Embedded Workbench for 8051バージョン7.20がリリースされたときに作成されたものです。それ以降、ここで説明した内容は変更されている可能性があります。
全ての製品名は、それぞれの所有者の商標または登録商標です。