定数データをバンクアプリケーションのバンクに格納する

テクニカル・ノート 27661

アーキテクチャ:

8051

コンポーネント:

linker

更新日:

2018/08/08 8:25

はじめに

IAR C/C++ Compiler for 8051は、Cのソースによって生成されたコードのバンキングのみサポートします。すなわち、CODEセグメントとバンキングの切り替えは、データアクセス時ではなく、C関数の呼び出し時のみ行われます。ただし、ツールの使い方を熟知しており、これを管理できる自信がある方は、データアクセス時のバンクの切り替えを不要にすることができます。それには、コードとそのコードからアクセスされる定数データを同じバンクに配置します。

以下の手順を実行します。

  1. 定数にアクセスする関数が定義されているCソースモジュールと同じ場所で、その定数を宣言します。
  2. #pragma memory=constseg(CONST1)を使用して、ユーザが名前をつけたセグメントである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からなる複数のペアを同じバンクに収めることができますが、その場合、マップファイルをチェックして、バンクに十分な空きがあるか、バンクを効率よく使用できるかどうかの確認が必要です。

本テクニカルノートは、2005年にIAR Embedded Workbench for 8051バージョン7.20がリリースされたときに作成されたものです。それ以降、ここで説明した内容は変更されている可能性があります。

 

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

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