0

我正在维护一个具有引导加载程序代码和应用程​​序代码的旧项目。他们工作得很好,但是在向应用程序代码添加一些功能(很少的 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

4

1 回答 1

0

您可能需要检查是否因为它是一个旧项目,您是否使用与以前完全相同的编译器版本和完全相同的优化级别。

我们已经看到编译器在不同版本之间发生了一些行为变化。此外,如果优化级别发生变化,如果缺少一些易失性语句,代码的行为可能会受到特别影响。

于 2014-01-03T13:56:46.423 回答