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: 关于CLA内存空间的问题

Part Number: TMS320F28388D

大家好,

我在使用CLA时发现ClaProg的内存空间不够,编译时会出现下面信息:

../2838x_FLASH_CLA_lnk_cpu1.cmd", line 161: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. run placement with alignment/blocking fails for section "Cla1Prog" size 0x1e98 page 0.  Available memory ranges:
   RAMLS5_6_7   size: 0x1800       unused: 0x1800       max hole: 0x1800

主要问题是ClaProg在Flash是够用的,但是在运行时需要复制到RAM中执行,但我的RAM空间不够,所以才有了上述错误,cmd文件配置如下:

/* BEGIN is used for the "boot to Flash" bootloader mode   */
   BEGIN            : origin = 0x080000, length = 0x000002
   BOOT_RSVD        : origin = 0x000002, length = 0x0001AF     /* Part of M0, BOOT rom will use this for stack */
   RAMM0            : origin = 0x0001B1, length = 0x00024F
   RAMM1            : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
//   RAMM1_RSVD       : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
   RAMD0            : origin = 0x00C000, length = 0x000800
   RAMD1            : origin = 0x00C800, length = 0x000800
   RAMLS0           : origin = 0x008000, length = 0x000800
   RAMLS1           : origin = 0x008800, length = 0x000800
   RAMLS2           : origin = 0x009000, length = 0x000800
   RAMLS3           : origin = 0x009800, length = 0x00800
   RAMLS4           : origin = 0x00A000, length = 0x000800
//   RAMLS5           : origin = 0x00A800, length = 0x000800
//   RAMLS6           : origin = 0x00B000, length = 0x000800
//   RAMLS7           : origin = 0x00B800, length = 0x000800

   RAMLS5_6_7      : origin = 0x00A800, length = 0x001800

CLADataLS0       : > RAMLS0
CLADataLS1       : > RAMLS1

Cla1ToCpuMsgRAM  : > CLA1_MSGRAMLOW, type=NOINIT
CpuToCla1MsgRAM  : > CLA1_MSGRAMHIGH, type=NOINIT
Cla1ToDmaMsgRAM  : > CLA1_DMA_MSGRAM, type=NOINIT
DmaToCla1MsgRAM  : > DMA_CLA1_MSGRAM, type=NOINIT

Cla1DataRam      : >> RAMLS0 | RAMLS1

/* CLA specific sections */
#if defined(__TI_EABI__)
Cla1Prog:  LOAD = FLASH4,
//  RUN = RAMLS5,
    RUN = RAMLS5_6_7,
    LOAD_START(Cla1funcsLoadStart),
    LOAD_END(Cla1funcsLoadEnd),
    RUN_START(Cla1funcsRunStart),
    LOAD_SIZE(Cla1funcsLoadSize),
    ALIGN(8)
#else
Cla1Prog:   LOAD = FLASH4,
//  RUN = RAMLS5,
    RUN = RAMLS5_6_7,
    LOAD_START(_Cla1funcsLoadStart),
    LOAD_END(_Cla1funcsLoadEnd),
    RUN_START(_Cla1funcsRunStart),
    LOAD_SIZE(_Cla1funcsLoadSize),
    ALIGN(8)
#endif

在cla文件中,我定义了一些功能函数(函数代码是从c28核移植过去的),并在Task1中调用,为什么这些代码会在ClaProg占用这么大空间,同样在c文件调用却没有这么大,不明白ClaProg中代码量是怎么算的,在CCS的内存分配中看到:

Cla1Prog:__claabi_addd(rts2800_fpu64_eabi.lib<addd.cla.obj>) 1904

这个文件就占用了1904个地址,我在cla文件中定义的那些函数,每个函数也就30行左右代码,为什么会占用这么大空间?有没有能缩减代码空间的配置或者其他方法?

请求帮忙解答一下,第一次用CLA,有好多不懂。