ZHCU875Z August 2001 – October 2023 SM320F28335-EP
除了生成 CRC 表,链接器还能针对存储器范围生成 CRC。为此,您应在 MEMORY 指令中使用 crc() 操作符,而不是在 SECTIONS 指令中使用 crc_table() 操作符。在 MEMORY 指令中,您指定存储器区域的 GROUP,用以计算 CRC 的值。GROUP 中的存储器范围必须是连续的。
语法如下:
MEMORY
{
GROUP(FLASH)
{
RANGE1 :...
RANGE2 :...
} crc(_table_name, algorithm=xxx)
}
此语法使链接器在 RANGE1 和 RANGE2 中
计算单一 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 指令中不可用。