您好!
内核上有两个程序:一个引导加载程序和一个应用程序。
引导加载程序从 POR 开始、检查应用程序 CRC 并最终分支到该应用程序。
从扇区4开始、将应用分配到更高的地址。
对于应用程序.resesertisr 段生成的代码、我有以下奇怪的行为。
我已经在链接器命令文件中声明了以下两个连续区域和相应的段:
CMBANK0_RESETISR:origin = 0x00210000,length = 0x00000008
CMBANK0_CRC :origin = 0x00210008、length = 0x00000002
.resesertisr:> CMBANK0_RESETISR、ALIGN (16)
.crc :> CMBANK0_CRC
我从.map 文件中看到、即使将.resesertisr 段分配给了一个8字节长的区域、它也只有6个字节:
.resesertisr
* 0 00210000 00000006
00210000 00000006 startup_cm.obj (.resesertisr:resetISR)
.CRC 0 00210008 00000002
00210008 00000002 main.obj (.crc)
因此、我预计会在两个段之间找到一个包含两个0xFF 未编程字节的空洞。
相反、这两个字节编程为0。
当然、我也在相应的.hex 文件记录中找到了相同的段长度信息、我可以使用这些信息来计算应用程序代码并将 CRC 附加到该文件中。
:0600000001F0B4BE7047E0
:02000800C71D12
十六进制文件 CRC 计算过程假设段之间的空洞是0xFF 下的未编程存储器区域。
因此、就最后而言、在.hex 文件上计算出的 CRC 与引导加载程序在启动时在应用程序存储器上计算出的 CRC 不同。
我的链接器命令文件中有什么问题吗?
谢谢!
卡洛