出力フォーマットは、複数のアドレス空間を扱えません
テクニカル・ノート 42505
アーキテクチャ:
AVR
コンポーネント:
linker
更新日:
2018/08/13 4:52
はじめに
MotorolaファイルとIntel-hexファイルに複数のメモリ空間が存在する場合、エラーが発生する場合がある。
メッセージ
Error[e133]: The output format motorola cannot handle multiple address spaces.Use format variants (-y -O) to specify which address space is wanted.
背景
Motorola形式やIntel-hex形式のように、複数のメモリ空間をサポートしていない出力形式の場合、メモリ空間ごとに出力ファイルが最大1つずつ必要となります。1つのメモリ空間(フラッシュ)にのみ出力を生成する場合には問題にはなりませんが、データメモリ空間内にあるEEPROMや外部ROMにもオブジェクトを配置しようとすると、出力形式がそうした状態を表すことができないため、リンカでは上記のエラーが発生します。
解決方法1
1つの出力形式(例: Motorola形式)のみ使用する場合、メモリ空間ごとに出力ファイルが1つ必要です。
- フラッシュメモリにのみ出力させるには、XLINKの-yオプションを使用します。
Project > Option > Linker > Extra options > Use command line optionsを有効にして、以下の内容を記述します。-y(CODE).
- 別のメモリ空間用の出力を生成するには、メモリ空間ごとに出力ファイルを1つずつ生成する必要があります。それには、XLINKの-Oオプションを使用します。
例えば、Motorola形式でEEPROM空間に出力する場合、Project > Options > Linker > Extra options > Use command line optionsを有効にして、以下の内容を記述します。
-Omotorola,(XDATA)=eeprom.a90
次のサンプルを確認してください: Motorola-example.zip
解決方法2
追加の出力形式(例えば、ubrof8形式とIntel標準形式)を使用し、なおかつEEPROMにもオブジェクトを配置する場合、Intel標準形式に対してExtra Outputオプションは使用できません。
解決方法:
- Extra Outputオプションが無効になっていることを確認します。
- ubrof8の出力ファイルを生成するには、Project > Options > Linker > Outputを有効にします。otherをクリックし、ドロップダウンメニューからUbrof8 (forced)を選択します。
- Intel標準形式の出力を生成する場合、メモリ空間ごとに出力ファイルが1つ必要です。フラッシュメモリにのみ出力させるには、Project > Options > Linker > Extra options > Use command line optionsを有効にして、以下の内容を記述します。
他のメモリ空間(例えば、EEPROM空間)に出力させる場合、Project)> Options > Linker > Extra options > Use command line optionsを有効にして、以下の内容を記述します。-Ointel-standard,(CODE)=flash.hex
-Ointel-standard,(XDATA)=eeprom.hex
次のサンプルを確認してください: Intel-standard-example.zip
全ての製品名は、それぞれの所有者の商標または登録商標です。