ZHCU875Z August 2001 – October 2023 SM320F28335-EP
如果尝试为整个闪存生成 CRC 值,请将表放在单独的存储器范围内,默认情况下将会放置 .TI.memcrc。例如:
MEMORY
{
/* 切出闪存段来存储 CRC 结果*/
CRC_PRELUDE : origin=0x0, length=0x10
GROUP
{
FLASH : origin=0x10, length=0xFFFF
} crc(_flash_crc, algorithm=CRC8_PRIME)
/* 其他存储器范围...*/
}
SECTION
{
.TI.memcrc > CRC_PRELUDE
}
以上示例已从整个闪存中切出一段闪存,让 .TI.memcrc 段驻留在这段闪存中,而其他所有符合 CRC 生成条件的内容则放置在闪存中。 这避免了将 CRC 结果放置在 CRC 范围内。
在某些情况下,您可能希望为整个闪存生成 CRC 并通过链接器生成的映射文件读回 CRC 结果(请参阅节 8.4.19)。但是,对于覆盖整个闪存的存储器范围,没有用于放置 CRC 结果的存储器位置。如果将其放置在闪存中,则违反了结果不能放置在输入范围内的规则。因此,如果没有适合放置 CRC 结果的位置,可将 .TI.memcrc 段标记为 COPY 段,如下所示:
.TI.memcrc : type=COPY
这可防止将存储器范围的 CRC 结果放置在任何位置。将 .TI.memcrc 标记为 DSECT 段具有相同的结果。