ZHCU875AA July 2001 – March 2026 SM320F28335-EP
除了生成 CRC 表,链接器还能针对存储器范围生成 CRC。为此,您应在 MEMORY 指令中使用 crc() 操作符,而不是在 SECTIONS 指令中使用 crc_table() 操作符。在 MEMORY 指令中,您指定连续存储器区域的 GROUP,用以计算 CRC 的值。
语法如下:
MEMORY
{
GROUP(FLASH)
{
RANGE1 :...
RANGE2 :...
} crc(_table_name, algorithm=xxx)
}
GROUP 的每个 crc() 会计算一个 CRC 值。一个 GROUP 可由多个连续的存储器范围组成。系统会为每个存储器范围创建一条记录,以指示该子范围的起始地址和结束地址。不会对子范围单独计算 CRC。
CRC 基于指定的算法,会考虑这些范围中的所有输出段。结果存储于表中,表的格式如节 8.9.2.6中所述。该表置于名为 .TI.memcrc 的输出段中,并且可将表名作为链接器符号进行访问。
crc() 的算法参数可能涉及节 8.9.1.1中列出的任何算法。如果没有指定任何算法,则使用默认算法,即 CRC32_PRIME。
指定 GROUP 名称是可选的。例如:
MEMORY
{
GROUP
{
RANGE1 :...
RANGE2 :...
} crc(_table_name, algorithm=CRC8_PRIME)
}
在 MEMORY 块内部使用 GROUP 时,语法选项仅限此处以及后面的小节介绍的功能。节 8.5.7 中所介绍的、用于 SECTIONS 指令内 GROUP 的全部功能在 MEMORY 指令中均不可用。