0

ブートローダー コードとアプリ コードを含む古いプロジェクトを維持しています。それらはうまく機能していましたが、アプリ コードにいくつかの機能を追加すると (いくつかの if ステートメント)、デバイスでブートローダー コードが何らかの形で上書きされていることに気付きました。pickit プログラマーを使用してロードすると、アプリ コードは独立して正常に動作します。

16 進ファイルをチェックアウトして、メモリ ロケーションで実際に何が変更されているかを確認しました。添付の hex_diff.png を参照してください。

[if文なし] :020000040000FA :060000007CEF7DF0120010 :060008009DEF51F0120013 :060018009DEF51F0120003 :010FFF00AB46

[if文あり] :020000040000FA :0600000039EF7EF0120052 :06000800E7EF51F01200C9 :06001800E7EF51F01200B9 :010FFF00AB46

他の違いの中でも、上の図のこのメモリ範囲の領域は、アプリ コードにいくつかの if ステートメントを追加しても、まったく変更されていないはずです。私のリンカファイルでは、ブートストラップコードを持つようにその領域を明確に定義しました: CODEPAGE NAME=bootloader START=0x0 END=0xFFF PROTECTED

[質問] この問題をデバッグする方法がわかりません。誰かがこの問題に遭遇しましたか? もしそうでなければ、あなたたちはそれにいくつかの手がかりを持っていますか?

事前にあなたの助けと提案をありがとう!

[編集] MPLABX v1.85 コンパイラ C18 v3.44 MPLink v4.45 マイクロコントローラ: PIC18F46J50

4

1 に答える 1

0

古いプロジェクトであるため、以前とまったく同じコンパイラ バージョンとまったく同じ最適化レベルを使用しているかどうかを確認することをお勧めします。

バージョンが異なると、コンパイラの動作が一部変更されることがわかりました。また、最適化レベルが変更された場合、いくつかの volatile ステートメントが欠落している場合、特にコードの動作が影響を受ける可能性があります。

于 2014-01-03T13:56:46.423 に答える