This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28384S:CM -有关.resescrisr 段代码生成的问题

Guru**** 2393725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1277985/tms320f28384s-cm---a-issue-about-resetisr-section-code-generation

器件型号:TMS320F28384S

您好!
内核上有两个程序:一个引导加载程序和一个应用程序。

引导加载程序从 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 不同。

我的链接器命令文件中有什么问题吗?

谢谢!
卡洛

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Carlo。

    您可以使用"fill"属性来使用某个常量来填充未使用的存储器

    例如:

    CMBANK0_RESETISR:origin = 0x00210000、length = 0x00000008、fill=0xFF

    此致、

    维纳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Veena:
    非常感谢您提供解决方案。  

    此致、
    卡洛