Я поддерживаю старый проект с кодом загрузчика и кодом приложения. Они отлично работали, но после добавления некоторых функций в код приложения (несколько операторов if) я заметил, что мой код загрузчика каким-то образом перезаписывается в устройстве. Код приложения самостоятельно работает нормально, если я загружаю его с помощью программатора pickit.
Я проверил свой шестнадцатеричный файл, чтобы увидеть, что на самом деле изменилось в ячейках памяти: см. прикрепленный файл hex_diff.png.
[Без операторов if] :020000040000FA :060000007CEF7DF0120010 :060008009DEF51F0120013 :060018009DEF51F0120003 :010FFF00AB46
[W/if операторы] :020000040000FA :0600000039EF7EF0120052 :06000800E7EF51F01200C9 :06001800E7EF51F01200B9 :010FFF00AB46
Помимо других отличий, области в этом диапазоне памяти на картинке выше вообще не должны были измениться, если я добавил пару операторов if в код приложения. В моем файле компоновщика я четко определил этот регион для кода начальной загрузки: CODEPAGE NAME=bootloader START=0x0 END=0xFFF PROTECTED
[Вопросы] Я не знаю, как решить эту проблему. Кто-нибудь сталкивался с этой проблемой? Если нет, не могли бы вы, ребята, найти какие-нибудь зацепки?
Спасибо за вашу помощь и предложения заранее!
[EDIT] Компилятор MPLABX v1.85 C18 v3.44 MPLink v4.45 Микроконтроллер: PIC18F46J50