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.

TMS320F280025: .map文件里没有分配到指定的段

Part Number: TMS320F280025


Dear team,

我在使用cmd文件遇到下面的问题:

.C文件里定义了一个段

1.放在指定地址

分配给指定地址,但是.map文件里找不到user1。

2.放在分配好的空间,.map文件里有分配出来的段,但是user1没有被放进去,也找不到.user1

(在之前的主程序里user1是分配成功过的,但是bootloader工程里分配失败)

请问是什么原因呢

Thanks,

Enya

  • 1.放在指定地址

    分配给指定地址,但是.map文件里找不到user1。

    section不要直接指向地址,指向之前分配好的USER1 memory

  • 第二种方法就是使用的分配好的memory。现在的问题是两种方式都在map文件里找不到.user1的段分配映射,下图是另一个工程成功的映射。

  • 下图是另一个工程成功的映射。

    方便和分配成功的工程比较一下吗?

    尤其是在相关指令的使用上。

    我没有在编译器手册中找到有关使用__attribute__指令放置代码到指定段的用法,这个可能是GCC的用法;在C28上一般是使用CODE_SECTION #Pragma指令,请查看zhcu876z_TMS320C28x 优化 C/C++ 编译器v22.6.0.LTS (Rev. Z)1186.9.4 CODE_SECTION Pragma

  • #pragma DATA_SECTION我也试过,还是不行,甚至尝试把数组改成结构体也是不行。目前区别只有指定的memory不同

    图片是两个段的比较

    下面是cmd文件里段指定的地址/memory。

    MEMORY
    {
       BEGIN           	: origin = 0x00080000, length = 0x00000002
       BOOT_RSVD		: origin = 0x00000002, length = 0x00000126
       RAMM0           	: origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x000003F8     /* on-chip RAM block M1 */
    // RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    /* RAMLS4           : origin = 0x0000A000, length = 0x00000800
       RAMLS5           : origin = 0x0000A800, length = 0x00000800
       RAMLS6           : origin = 0x0000B000, length = 0x00000800
       RAMLS7           : origin = 0x0000B800, length = 0x00000800*/
    
       /* Combining all the LS RAMs */
       RAMLS4567        : origin = 0x0000A000, length = 0x00002000
       RAMGS0           : origin = 0x0000C000, length = 0x000007F0//
    // RAMGS0_RSVD      : origin = 0x0000C7F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    
    //  FLASHBANK1       : origin = 0x00080000, length = 0x0000FFF0
    //  FLASH_BANK1_RSVD : origin = 0x0008FFF0, length = 0x00000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       BOOTROM          : origin = 0x003F0000, length = 0x00008000
       BOOTROM_EXT      : origin = 0x003F8000, length = 0x00007FC0
       RESET            : origin = 0x003FFFC0, length = 0x00000002
       /* Flash sectors */
       /* BANK 0 */
    
       FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x001FF0	/* on-chip Flash0x000FFE */
       USER1             : origin = 0x00081FF2, length = 0x00000004
       //   FLASH_BANK0_SEC1  : origin = 0x080100, length = 0x001F00	/* on-chip Flash */
       BEGIN_MAIN        : origin = 0x082000, length = 0x000002
       FLASH_BANK0_SEC2  : origin = 0x082002, length = 0x004FFE	/* on-chip Flash */
    //   FLASH_BANK0_SEC3  : origin = 0x082100, length = 0x001900	/* on-chip Flash */
    //   FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000	/* on-chip Flash */
    //   FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000	/* on-chip Flash */
    //   FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC9  : origin = 0x089000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000	/* on-chip Flash */
       FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x000FF0	/* on-chip Flash */
    // FLASH_BANK0_SEC15_RSVD     : origin = 0x08FFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    }
    
    //#define MAIN
    #define BOOT
    SECTIONS
    {
    #ifdef BOOT
       codestart        : > BEGIN, ALIGN(8)
       .text            : > FLASH_BANK0_SEC0,   ALIGN(8)
       .cinit           : > FLASH_BANK0_SEC0,  ALIGN(8)
       .switch          : > FLASH_BANK0_SEC0,  ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
       .init_array      : > FLASH_BANK0_SEC0,  ALIGN(8)
       .bss             : > RAMLS4567
       .bss:output      : > RAMLS4567
       .bss:cio         : > RAMGS0
       .const           : > FLASH_BANK0_SEC0,  ALIGN(8)
       .data            : > RAMLS4567
       .sysmem          : > RAMLS4567
    
       .user1           : > USER1
       .sec_noinit 		: > 0x0000C7E0, 	TYPE = NOINIT, 	PAGE = 1
    #else
       codestart        : > BEGIN_MAIN, ALIGN(8)
       .text            : >> FLASH_BANK0_SEC2,   ALIGN(8)
       .cinit           : > FLASH_BANK0_SEC2,  ALIGN(8)
       .switch          : > FLASH_BANK0_SEC2,  ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
       .init_array      : > FLASH_BANK0_SEC2,  ALIGN(8)
       .bss             : > RAMLS4567
       .bss:output      : > RAMLS4567
       .bss:cio         : > RAMGS0
       .const           : > FLASH_BANK0_SEC2,  ALIGN(8)
       .data            : > RAMLS4567
       .sysmem          : > RAMLS4567
    
       	.user2           : > 0x082208, 	PAGE = 1
       	.sec_noinit 		: > 0x0000C7E0, 	TYPE = NOINIT, 	PAGE = 1
    #endif
    
        ramgs0 : > RAMGS0
    
        /*  Allocate IQ math areas: */
       IQmath           : > RAMLS4567
       IQmathTables     : > RAMLS4567
    
      .TI.ramfunc      : LOAD = FLASH_BANK0_SEC0,
                      RUN = RAMGS0,
                      LOAD_START(RamfuncsLoadStart),
                      LOAD_SIZE(RamfuncsLoadSize),
                      LOAD_END(RamfuncsLoadEnd),
                      RUN_START(RamfuncsRunStart),
                      RUN_SIZE(RamfuncsRunSize),
                      RUN_END(RamfuncsRunEnd),
                      ALIGN(8)
    	DataBufferSection : > RAMLS4567, ALIGN(8)
    }
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */