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.

[参考译文] TMS320F2800132:使用链接器转换计算出的 ASCII CRC

Guru**** 2422790 points
Other Parts Discussed in Thread: C2000-CGT

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1540345/tms320f2800132-using-the-linker-to-convert-the-calculated-crc-in-ascii

器件型号:TMS320F2800132
主题中讨论的其他器件:C2000-CGT

工具/软件:

您好:

我实际上使用链接器在某个特定区域计算和存储 CRC。

我根据需要计算的区域使用 crc 和 crc_table 运算符、并使用 stratup 处的此 CRC 值来验证代码是否正常。

我在存储器中创建了一个 ASCII 中的“标头“、其中包含有关代码的一些信息、因此打开.out 文件该标头很容易读取、无需任何知识即可将十六进制转换为 ASCII 等。

我的问题是: 是否可以使用链接器将不同的 CRC 转换为 ASCII 并将其存储在特定的闪存位置?

这可能可以使用编译后处理脚本来完成、但我不知道如何操作。

如需信息、我使用  TI C2000-CGT 编译器 v22.6.1.LTS。

此致。

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

    尊敬的 Manu:  

    很抱歉、稍后的回复、请让我向 CRC 专家提出相关问题。

    谢谢

    Aswin

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

    不幸的是,我不明白这个描述...

    我在存储器中创建了一个 ASCII 格式的“标头“、其中包含有关代码的一些信息、因此打开.out 文件头很容易读取、无需任何知识即可将十六进制转换为 ASCII 等。

    所以我不能回答这个问题...

    是否可以使用链接器将不同的 CRC 转换为 ASCII 并将其存储在特定的闪存位置?

    但对我来说、描述事物通常是如何工作的可能会有所帮助。

    我想您使用 CRC_TABLE 运算符、如  C28x 汇编工具手册中标题为链接器生成的 CRC 表和存储器范围的 CRC 一章所述。  在这种情况下、是 CRC_TABLE 链接器创建的条目位于名为的输出段中 .TI.crctab 。  这是一个初始化段、与类似 .const .text 。  我假设您使用链接器命令文件中类似于...的规范来分配此段。

        .TI.crctab > MEMORY_RANGE_NAME_HERE

    链接器完成后会创建一个二进制可执行文件。  链接器本身不支持其他输出格式。  但可以创建另一个表示相同信息、但格式称为十六进制的文件。  这通过十六进制转换实用程序来完成 hex2000 、这也在 C28x 汇编工具手册中进行了说明。  十六进制转换实用程序会转换已初始化段的内容、如所示 .TI.crctab 、转换为命令行选项选择的十六进制格式。  若要更好地了解二进制可执行文件和相关的十六进制 文件、请参阅文章 TI 目标文件格式的简要历史记录。   

    谢谢。此致、

    -乔治

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

    如果不是很清楚的话,那就算了。 我将尽力澄清。

    [报价 userid=“4373" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1540345/tms320f2800132-using-the-linker-to-convert-the-calculated-crc-in-ascii/5944981

    我想您使用 CRC_TABLE 运算符、如  C28x 汇编工具手册中标题为链接器生成的 CRC 表和存储器范围的 CRC 一章所述。  在这种情况下、是 CRC_TABLE 链接器创建的条目位于名为的输出段中 .TI.crctab 。  这是一个初始化段、与类似 .const .text 。  我假设您使用链接器命令文件中类似于...的规范来分配此段。

    全屏
    1.
    .TI.crctab > memory_range_name_here
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    [/报价]

    是的、您是对的。

    我使用.TI.crctab 和另一个使用 TI.memcrc 的 CRC。

    在.map 文件中、可以获取我使用的所有不同 CRC:

    链接器生成的 CRC 表

    _my_crc_table_for_safety @ 00080078 记录:1、大小/记录:8、表大小:10
    .section_safety:algorithm=CRC32_PRIME (ID=0)、page=0、load addr=00086708、size=00001572、crc=b242174e
    _my_crc_table_for_safetyram @ 00080082 记录:1、大小/记录:8、表大小:10.
    Safetyramfunc:Algorithm=CRC32_PRIME (ID=0)、page=0、load addr=000865f0、size=00000117、CRC=3117a639


    链接器生成的 MEMRANGE CRC 表

    flashbank0_checksum @ 00080068 记录:1、大小/记录:6、表大小:12、算法=CRC32_PRIME (ID=0)、CRC:bf37e83f
    FLASHBANK0_CODE:page=0、load addr=000800d8、size=00006518

    我已将 CRC 存储在存储器开头的一些段放置在存储器中、现在如果我使用文本编辑器打开.out 文件(存储 CRC 的位置)、我只能看到一些不可读的字符(可能是 NB² μ s)、因为它是“原始十六进制值“。 使用某种十六进制 ASCII 转换器我可以在输出文件中看到 CRC、但由于转换以及存储器中的 32 位存储方式、这并不重要。

    我想将 CRC 32 位值(例如 b242174e)转换 为字符串、以便在使用文本编辑器打开.out 文件时、可以看到  “b242174e"而“而不是  NB² μ s。

    我希望这一点得到澄清。

    此致。

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

    如您所见、很难直接检查 A .out 添加到工程。  这是映射文件的主要原因。  话虽如此、我将为您展示另一种查看 CRC 表的方法。

    使用目标文件显示实用程序 ofd2000 。   C28x 汇编工具手册对此进行了介绍。  运行类似于...的命令

    ofd2000 --verbose --obj_display=none,sections --output=ofd_report.txt file.out

    检查文件 ofd_report.txt 。  搜索 .TI.crctab 。  您将看到类似于以下内容的内容:

        <6> ".TI.crctab"
           Load Address:        0x00108b2a    Run Address:        0x00108b2a
           Size:                0xa           Alignment:          2         
           Loaded Onto Device:  Yes           Address Unit Size:  16 bits   
           File Offset:         0x1888        # Relocs:           0         
           Section Type:        SHT_PROGBITS  ELF sh_flags:       0x2       
           ELF sh_flag:         SHF_ALLOC     TI ext_flags:       0x0

    字段 文件偏移量 是中的字节偏移 .out 此部分开始的文件。  字段 尺寸小 长度。  将这些值用作转储二进制文件(如)的实用程序的输入 OD 命令可用于大多数类 Unix 系统。

    谢谢。此致、

    -乔治

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

    我明白了这个想法、但我想阻止对.out 文件进行任何后处理。

    这将必须由非工程团队使用,这就是为什么在带文本编辑器的.out 文件中使其可读将是我们最好的,如果可能,当然,但我真的不确定它是可能的。

    或者、实际上我使用.map 来获取 CRC 值、然后在 源文件中使用它来创建一个常量字符、我将其存储在存储器开头(在 CRC 计算区域之外可防止 CRC 再次更改)。 但如果链接器可以直接完成、会更容易。

    此致  

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

    链接器中唯一可用的解决方案是在映射文件中看到的解决方案。

    考虑此建议:同时向非工程团队提供 .out 文件映射文件、以及一个简短文档、其中介绍了如何在映射文件中查看 CRC 值。

    谢谢。此致、

    -乔治