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.

[参考译文] TMS320F28388D:生成十六进制文件时地址重叠

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1518233/tms320f28388d-hex-file-being-generated-with-address-overlap

器件型号:TMS320F28388D

工具/软件:

我怀疑链接器中有一个问题、导致生成的 Intel Hex 文件中出现地址重叠。 我随附了链接器作为参考。  我 在第3行的地址0x84010处有数据重叠

e2e.ti.com/.../2055.2838x_5F00_FLASH_5F00_lnk_5F00_cpu1.txt

我怀疑下一段导致了重叠、其中 CRC_AREA 是冲突段。 如果链接器将闪存组的 CRC 放入 CRC_DATA 中、应用程序是否也可能写入该段中、从而导致冲突? 由于这些区域看起来是连续的、并且 CRC_DATA 被排除在组中、因此我不确定、因此我要找一个具有更多链接器体验的第二眼图来指出可能的问题。

GROUP {      /* GROUP memory ranges for crc/checksum of entire flash */
   BEGIN            : origin = 0x084020, length = 0x000002, fill=0xFFFF
   FLASH2_13        : origin = 0x084022, length = 0x03BEEE, fill=0xFFFF /* on-chip Flash - FLASH2 to FLASH13 are combined */
   NV_DATA          : origin = 0x0BFF10, length = 0x0000E0, fill=0xFFFF /* for storing nv data */
} crc(_ccs_flash_checksum, algorithm=CRC16_802_15_4)
   CRC_DATA		: origin = 0x84000, length = 0x000020, fill=0xFFFF       /* for storing auto generated crc */

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

    尊敬的 Xavier:

    让我循环编译器专家以了解更多信息。

    谢谢

    Aswin

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

    在 C28x CPU 上、存储器地址每16位字递增一次。  这与几乎所有其他 CPU 不同、CPU 存储器地址每8位字节递增一次。  

    以下是16位字地址导致的一种效果的仅构建图示。

    C:\examples>type file.asm
            .sect   "test"
            .word   0x0000, 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777
            .word   0x8888, 0x9999, 0xaaaa, 0xbbbb, 0xcccc, 0xdddd, 0xeeee, 0xffff
    
            .word   0x0000, 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777
            .word   0x8888, 0x9999, 0xaaaa, 0xbbbb, 0xcccc, 0xdddd, 0xeeee, 0xffff
    
    C:\examples>cl2000 file.asm
    
    C:\examples>hex2000 --intel --romwidth=16 file.obj -o file.hex
    Translating to Intel format...
       "file.obj" test ==> test
    
    C:\examples>type file.hex
    :200000000000111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEEFFFFF0
    :200010000000111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEEFFFFE0
    :00000001FF
     

    第一个命令显示名为的汇编文件的内容 file.asm 。  第二个命令用于构建它。  第三个命令用于从目标文件创建一个 Intel hex 格式文件。  第四个命令显示十六进制输出。  对目标文件使用十六进制实用程序永远不会在生产环境中完成。  但它在这样的小演示中运行良好。

    重点关注十六进制输出的第二行。  地址不是0x0020、而是0x0010。  这是因为前一行包含16个16位字。

    以下是查看相同内容的不同方法...请搜索 C28x 汇编工具手册 、以获取标题为" 控制 ROM 器件地址"的子章节。  阅读以"4. -byte 选项"。

    谢谢。此致、

    -乔治