我正在维护一个具有引导加载程序代码和应用程序代码的旧项目。他们工作得很好,但是在向应用程序代码添加一些功能(很少的 if 语句)后,我注意到我的引导加载程序代码正在以某种方式在设备中被覆盖。如果我使用 pickit 程序员加载应用程序代码,它可以独立工作。
我检查了我的 hex 文件以查看内存位置的真正变化:请参阅附加的 hex_diff.png。
[W/O if 语句] :020000040000FA :060000007CEF7DF0120010 :060008009DEF51F0120013 :060018009DEF51F0120003 :010FFF00AB46
[W/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