大家好,
我在使用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,有好多不懂。