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.

[参考译文] 编译器/TMS570LC4357:NowECC 与链接器生成 ECC

Guru**** 664280 points
Other Parts Discussed in Thread: NOWECC, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/681586/compiler-tms570lc4357-nowecc-versus-linker-to-generate-ecc

器件型号:TMS570LC4357
主题中讨论的其他器件:NOWECCUNIFLASH

工具/软件:TI C/C++编译器

大家好、我提前对在错误的论坛中发布信息(如果我是)表示歉意。  我们以前使用:

nowECC -R5 -f021 16M_ADD -A foo.hex

但是、由于不再支持 nowECC、我们希望迁移到由链接器命令文件生成 ECC。  我可以从 nowECC 获取的唯一文档是使用-h 选项运行它、在这里、我会得到模糊的信息、并且似乎与此处的信息不直接相关:h t p processors.wiki.ti.com/index.php/Linker_Generated_ECC。  例如、-R5选项说明为"使用 Cortex-R5的"CPU 中的 ECC "特性"、此特性提供很少真实信息。  这如何转化为链接器命令行过程?

我尝试应用 wiki 中给出的示例、虽然没有遇到错误、但生成的十六进制文件的 ECC 段比 nowECC 生成的十六进制文件的 ECC 段增加了一倍。

理想情况下、如果有人能告诉我如何使用任何 Linder 命令行信息从上述命令行指令创建相同的十六进制文件、我会很激动。

以下是链接器命令文件中的相关截点(生成的 ECC 段比我预期的要大):

ECC{
algoL2R5F021:address_mask = 0xfffffff8 //地址位31:3 */
汉明_mask = R4 /*使用掩码中的 R4/R5构建*/
奇偶校验掩码= 0x0c //设置哪些 ECC 位是偶校验和奇校验*/
镜像= F021 //* RM57Lx 和 TMS570LCx 在 F021中编译

存储器

pbl_vec (rwx): origin, blah blah

pbl_crc (RW):origin,blah blah

pbl_TXT (rwx):origin,blah blah

ECC_VEC (R):origin=(0xf0400000 +(start (PBL_VEC)>> 3))
length=(size (PBL_VEC)>> 3)
ecc={algoL2R5F021、input_range=PBL_VEC}

ECC_CRC (R):origin=(0xf0400000 +(开始(PBL_CRC)>> 3))
length=(size (PBL_CRC)>> 3)
ecc={algoL2R5F021、input_range=PBL_CRC}

ECC_TXT (R):origin=(0xf0400000 +(开始(PBL_TXT)>> 3))
length=(size (PBL_TXT)>> 3)
ecc={algoL2R5F021、input_range=PBL_TXT}

可以有人帮忙吗?  谢谢!

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

    Dan、您好!

    由于您正在请求如何在链接器命令文件中生成 ECC、我假设您正在使用 TI 工具? CCS 和 Uniflash 能够在编程阶段自动计算 ECC 并对其进行编程。 以下内容位于 CCS 中的工程属性下、Uniflash 中有一个类似的屏幕。

    此选项无需使用 NowECC 工具或在链接器命令文件中包含 ECC 生成功能。 如果想法是最终得到包含 ECC 的映像、则还可以使用 Uniflash 读回整个存储器并将其存储在文件中。

    如果您仍想使用链接器命令文件选项、本主题中存在一些帖子。 下面是一些链接。

    希望这些信息对您有所帮助。 请告诉我是否有任何后续问题、这些问题是否能够充分回答您的问题。

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

    当我最初阅读您的帖子时、我很惊讶您提到 NowECC 不再受支持、但我看到 TI.com 上用于下载该工具的链接处于非活动状态、因此我无法确定真实状态。 经过一些研究后、我发现由于在我们的 Web 组织中创建链接所遵循的流程、该链接丢失了。 自此之后、此问题已得到更正、更新后的页面应在接下来的24小时内上线。 即、我们的客户可以使用并将继续使用该工具。

    在这种情况下,它是一个成熟的产品,并且没有计划在 Microsoft 推出新平台后,将来迁移到新平台。

    此外、正如您指出的、还有一种新开发的生成构建映像的方法、包括 ECC。 这是通过使用链接器命令文件在构建时生成 ECC 并将其包含在创建的映像中(bin、hex、out、elf、coff、 等)。

    另一种方法是将 ECC 值作为编程过程的一部分进行计算和编程、如我在初始响应中所述。 这是 Uniflash 和 CCS 编程器支持的最新方法。 如果您正在使用自定义或第三方编程工具、或者您希望确保存档的映像已完成、但以后由于外部影响而无法更改、则这可能是不够的。

    维持 NowECC 工具的最后一个参数是、它为计算 ECC 值提供了一个单独的独立引擎。 如果是在程序时生成的 ECC、则使用 CPU 计算要编程的 ECC。 这意味着、如果器件的算法存在缺陷、它将传播到已编程的 ECC 值中、直到太晚才会实现。

    无论如何、此工具应继续可用的许多原因、并且我已启动修复/恢复损坏的下载链接的活动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们之所以有兴趣从 NowECC 迁移、原因之一是没有适用于 NowECC 的 Linux 工具链选项。  如果可以解决这一问题、我同意、我们很乐意继续使用 NowECC、尤其是因为您已经指出它未被弃用。

    谢谢

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

    感谢您提供这些链接-我已经介绍了所有这些链接、尽管这些似乎是类似的问题、但我仍然无法解决我遇到的问题。  基本问题是同一组代码、在使用 NowECC 进行编译时、十六进制文件中生成的 ECC 代码为"X";在使用链接器进行编译时(以及链接器命令文件中所需的所有更改)、以生成 ECC、 十六进制文件中生成的 ECC 代码是"X + Y"、其中 Y 的大小与 X 大致相同。 进一步使用它之后、 我似乎只能在将闪存段的存储器区域显式限制为代码大小时、才可以将 Y 的大小减小到大约零。  因此、在使用链接器 ECC 生成方法时、由于某种原因、算法会继续生成代码、以确定代码末尾和为其保留的存储器空间末尾之间的0xFFFF 填充空间。  我使用了适当的 vfill 指令。  你有其他建议吗?  是否值得将此主题移至 NowECC 论坛?  我将从这两个实例中剪切地图文件、以便进一步检查:

    基于大小为 PBL_TXT = 0xC000的链接器

    名称源长度使用未使用的属性填充
    ------------ ---- ------ ---- ---- --------
    pbl_vec 00000000 00000020 00000020 00000000 RW X (ffffFFFF)
    pbl_crc 00000020 00000100 00000080 00000080 rw (ffffffff)
    Pbl_TXT 00000120 0000bee0 00004c70 00007270 RW X (ffFFFF)
    ECC_VEC f0400000 00000004 00000004 00000000 R
    ECC_CRC f0400004 00000020 00000020 00000000 R
    ECC_TXT f0400024 000017dc 000017dc 00000000 R

     

    基于链接器的大小为 PBL_TXT =代码大小(0x4c70)

    名称源长度使用未使用的属性填充
    ------------ ---- ------ ---- ---- --------
    pbl_vec 00000000 00000020 00000020 00000000 RW X (ffffFFFF)
    pbl_crc 00000020 00000100 00000080 00000080 rw (ffffffff)
    Pbl_TXT 00000120 00004c70 00004c70 00000000 RW X (ffFFFF)
    ECC_VEC f0400000 00000004 00000004 00000000 R
    ECC_CRC f0400004 00000020 00000020 00000000 R
    ECC_TXT f0400024 0000098e 0000098e 00000000 R

     

    这两个地图是否应该相同?  不应仅为 PBL_TXT 的"已使用"部分生成 ECC_TXT?