повреждение загрузчика, вызванное добавлением операторов if в код приложения *HELP!!*

Я поддерживаю старый проект с кодом загрузчика и кодом приложения. Они отлично работали, но после добавления некоторых функций в код приложения (несколько операторов 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


person user2917406    schedule 24.10.2013    source источник
comment
Можете ли вы поделиться дополнительной информацией о вашей среде программирования, задействованных языках и/или архитектуре, о чем-то кроме «загрузчика» и «микрочипа»?   -  person Pedantic    schedule 25.10.2013
comment
Компилятор MPLABX v1.85 C18 v3.44 MPLink v4.45 Микроконтроллер: PIC18F46J50   -  person user2917406    schedule 25.10.2013
comment
@Pedantic Конечно!   -  person user2917406    schedule 25.10.2013


Ответы (1)


Возможно, вы захотите проверить, используете ли вы, поскольку это старый проект, ту же версию компилятора и тот же уровень оптимизации, что и раньше.

Мы видели некоторые изменения в поведении компилятора между разными версиями. Кроме того, если уровень оптимизации изменен, поведение кода может быть затронуто, особенно если отсутствуют некоторые изменчивые операторы.

person Damien    schedule 03.01.2014