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.

[参考译文] TMS320F28379S:HIGH 位置说明符对 COFF 和 EABI 有所不同

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1179844/tms320f28379s-high-location-specifier-makes-different-for-coff-and-eabi

器件型号:TMS320F28379S

Hallo、

我要将系统从 COFF 迁移到 EABI。

最后一个问题是数据结构、它必须放置在第二个闪存组的末尾。

链接器命令文件(其相关部分):

MEMORY {
   FLASH_1          : origin = 0x080002, length = 0x040000 - 2 		// no discontinued space for 1MB Flash, no prefetch gap with last 16 words (see Table 6, SPRZ422I)
   FLASH_2          : origin = 0x0C0000, length = 0x040000
   ...
   ...
}

SECTIONS {
   ...
   ...
   	.buildinfo       : >  FLASH_2(HIGH)
}

EABI 的结果(映射文件)、不可接受的内容、因为闪存的.buildInfo 之后的一些结束字节保持未使用:

.buildinfo 
*          0    000fff80    00000078     
                  000fff80    00000078     buildInfo.obj (.buildinfo)

COFF 的结果(映射文件)、我希望获得的结果以及已经对我有效的结果:

.buildinfo 
*          0    000fff88    00000078     
                  000fff88    00000078     buildInfo.obj (.buildinfo)

结构的大小保持不变(0x78)、但位置不同。 我希望在同一地址(0x000fff88)看到我的结构。

如何在0x0x000fff88处获取结构?

直接放置".buildinfo    : 0x000fff88" 会导致链接器错误。 为什么?

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

    您好!

    使用绝对地址时是否可以共享错误消息?

    此致、

    Veena

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

    您好!

    绝对位置如下所示:

    SECTIONS {
       ...
       ...
       	.buildinfo       : 0x0x000FFF88
    }

    有警告和以下错误列表。 但是、警告与存在问题的放置方式完全匹配。

    第75行:警告#10096-D:指定的地址位于内存映射之外
    错误#10264:默认存储器范围与现有存储器范围 RAM_M0重叠
    错误#10264:默认存储器范围与现有存储器范围 RAM_M1重叠
    错误#10264:默认存储器范围与现有存储器范围 RAMLS 重叠
    错误#10264:默认存储器范围与现有存储器范围 RAMGS0_3重叠
    错误#10264:默认存储器范围与现有存储器范围 RAMGS4_8重叠
    错误#10264:默认存储器范围与现有存储器范围 RAMGS8_15重叠
    错误#10264:默认存储器范围与现有存储器范围开始重叠
    错误#10264:默认存储器范围与现有存储器范围 FLASH_1重叠
    错误#10264:默认存储器范围与现有存储器范围 FLASH_2重叠
    错误#10264:默认存储器范围与现有存储器范围复位重叠

    错误#10010:链接期间遇到错误;未生成"Firmware.out"

    这似乎很奇怪。 通过这种单一放置方式、所有存储器范围(RAM 和闪存)不再有效。 如果没有绝对放置、链接器将执行该任务、而不会发出任何警告。

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

    另一个变通办法是:分离的存储器范围、不适用于.buildInfo 结构。

    MEMORY CONFIGURATION
    
             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      RAM_M0                00000123   000002dd  00000000  000002dd  RWIX
      ...
      ...
      BEGIN                 00080000   00000002  00000002  00000000  RWIX
      FLASH_1               00080002   0003fffe  0003fff8  00000006  RWIX
      FLASH_2               000c0000   0003ff88  00018073  00027f15  RWIX
      FLASH_XXX             000fff88   00000078  00000000  00000078  RWIX
      RESET                 003fffc0   00000002  00000000  00000002  RWIX

    并将其放置在精确的大小范围内:

    	.buildinfo       : > FLASH_XXX

    产生另一种误差。

    第75行:错误#10099-D:程序将不能放入可用存储器中、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 对于大小为0x78的".buildinfo"段、对齐/分块放置失败。  可用存储器范围:

    但这并不连贯。 从存储器映射中获得: Flash_XXX 大小: 0x00000078和.buildInfo 大小也为0x0078

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .buildinfo 
    *          0    00000000    00000078     FAILED TO ALLOCATE

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

    我认为这可能是由于数据阻塞。 有关更多详细信息- https://software-dl.ti.com/ccs/esd/documents/C2000_c28x_migration_from_coff_to_eabi.html#data-page-dp-pointer-load-optimization

    如果该段包含全局变量、您是否可以尝试添加 __attribute__((noblocked))?

    此致、

    Veena

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

    是的、这很有用。

    非常感谢。

    更好地解释"数据阻止":
    software-dl.ti.com/.../cgt_data-blocking-c2000.html