ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
可通过链接器命令文件生成纠错码 (ECC) 并将其放置在单独的段中。
若要启用 ECC 支持,应在命令行中添加 --ecc=on 链接器选项。默认情况下,ECC 生成功能已关闭,即使在链接器命令文件中使用了 ECC 指令和 ECC 限定符也是如此。因此,您可以在链接器命令文件中完全配置 ECC,同时仍然能够通过命令行快速打开和关闭代码生成功能。有关配置 ECC 支持功能的链接器命令文件语法的详细信息,请参阅节 8.5.9。
ECC 使用额外的位来允许器件检测和/或纠正错误。链接器提供的 ECC 支持与各种 TI 器件上 TI 闪存中的 ECC 支持兼容。TI 闪存使用修改后的汉明码 (72,64),该代码为每 64 位使用 8 个奇偶校验位。请检查闪存相关文档以查看是否支持 ECC。(用于读写存储器的 ECC 在运行时完全在硬件中进行处理。)
使用 --ecc=on 选项启用 ECC 后,可使用以下命令行选项通过将位错误注入链接的可执行文件来测试 ECC。这些选项可以指定应出现错误的地址以及该地址处要翻转的代码/数据位的位掩码。可以使用绝对方式指定错误的地址,也可以指定为符号的偏移。在注入数据错误后,就会计算数据的 ECC 奇偶校验位,就好像错误不存在一样。这样便可以模拟实际可能发生的位错误,并测试 ECC 纠正不同级别错误的能力。
--ecc:data_error 选项可将错误注入位于指定位置的加载映像中。语法为:
--ecc:data_error=(symbol+offset|address)[,page],bitmask
address 是要注入错误的最小可寻址单元的位置。symbol+offset 可用于通过相对于该符号的有符号偏移来指定要注入错误的位置。如果地址出现在多个内存页上,则需要 page 编号来确保位置无歧义。bitmask 是要翻转的位掩码;其宽度应该是可寻址单元的宽度。
例如,以下命令行可以翻转地址 0x100 处字节中的最低有效位,使其与该字节的 ECC 奇偶校验位不一致:
armcl test.c --ecc:data_error=0x100,0x01 -z -o test.out
以下命令可以翻转 main() 代码的第三个字节中的两个位:
armcl test.c --ecc:data_error=main+2,0x42 -z -o test.out
--ecc:ecc_error 选项将错误注入与指定位置对应的 ECC 奇偶校验位中。请注意,ecc_error 选项因此只能指定 ECC 输入范围内的位置,而 data_error 选项也可以指定 ECC 输出存储器范围内的错误。语法为:
--ecc:ecc_error=(symbol+offset|address)[,page],bitmask
此选项的参数与 --ecc:data_error 的参数相同,只是 bitmask 必须正好为 8 位。受影响 ECC 字节的镜像副本也将包含相同的注入错误。
使用 --ecc:ecc_error 向一个 ECC 字节中注入错误后,可能会导致运行期间在该 ECC 字节覆盖的 8 个数据字节中的任何一个字节中检测到错误。
例如,以下命令可以翻转 0x200 处 ECC 字节中包含该字节奇偶校验信息的每个位:
armcl test.c --ecc:ecc_error=0x200,0xff -z -o test.out
链接器不允许将错误注入既不属于 ECC 范围也不属于 ECC 范围的输入范围的存储器范围。编译器只能将错误注入已初始化的段。