出力フォーマットは、複数のアドレス空間を扱えません

テクニカル・ノート 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を有効にして、以下の内容を記述します。
    -Ointel-standard,(CODE)=flash.hex
    他のメモリ空間(例えば、EEPROM空間)に出力させる場合、Project)> Options > Linker > Extra options > Use command line optionsを有効にして、以下の内容を記述します。
    -Ointel-standard,(XDATA)=eeprom.hex

    次のサンプルを確認してください: Intel-standard-example.zip

 

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

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