0

私は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は私を殺している、助けてください:-)

4

1 に答える 1

0

2つのアプリケーションを同じメモリアドレス空間にロードすることはできません。magic_flagプログラムのフラッシュメモリで両方をマージできるよりも高いアドレスにアプリケーションを再コンパイルする必要があります。リンカーは代わりにそれを行うことはできません。:)

于 2012-06-28T07:58:19.460 に答える