私はMPLABX(MPLAB 8の場合もあります)を使用していて、プロジェクトを完了させています。私はこれらのHEXファイルを持っています:
- bootloader.hex
- magic_flag.hex
ブートローダーはアドレス0x0から0x7FFにロードされます。マジックフラグの位置はアドレス0x40(ブートローダー領域)にあります。
そして今、すべてをロードするためにMPLAB Xでプロジェクトをセットアップする必要があります(bootloader + magicFlag + app)。ブートローダーをロードし、次にmagicFlagをロードしてから、保存されたフラッシュメモリをセットアップし、アプリケーションで作業して、アプリケーション領域(0x800から0xFFFF)のみをロードすることは可能ですが、私にとってはあまり快適ではありません。たとえば、iSYSTEMのWinIDEA IDEでFreescaleを使用した場合、多くのSXファイルをロードするように設定することができ、非常にシンプルで迅速に機能していました。しかし、MPLAB XIで試してみると、常にエラーが発生します。
(944)appl.hexとbootloader.hexの間のアドレス0hでのデータの競合。
私が試したこと:
- プロジェクトプロパティにロードするためのセットアップファイル(セクションロード)
- プロジェクトプロパティでメモリ範囲を設定する(セクションICD 3)
しかし、ICD3のロードには問題がないことを私は思います。MPLABXがユニファイド16進ファイルを作成しているときにエラーが発生したためです。
そして想像してみてください、これはリンカーの私の部分です:
CODEPAGE NAME=BootResetVec START=0x000 END=0x007 PROTECTED
CODEPAGE NAME=BootHighISR START=0x008 END=0x017 PROTECTED
CODEPAGE NAME=BootLowISR START=0x018 END=0x029 PROTECTED
CODEPAGE NAME=TRMAGIC START=0x040 END=0x07F PROTECTED
CODEPAGE NAME=BootLoader START=0x080 END=0x07FF PROTECTED
CODEPAGE NAME=page START=0x800 END=0x7D7F
CODEPAGE NAME=debug START=0x7D80 END=0x7FFF PROTECTED
これは私のプロジェクトだけではなく、magicFlagを備えたブートローダーがあり、applからのソースコードしかないことを思い出してください。もちろん、1つのプロジェクトにapplを含むブートローダーソースコードを含める方がよいでしょう。
だから、MPLABXは私を殺している、助けてください:-)