TI中文支持网
TI专业的中文技术问题搜集分享网站

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_7size: 0x1800unused: 0x1800max hole: 0x1800

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

/* BEGIN is used for the "boot to Flash" bootloader mode*/BEGIN: origin = 0x080000, length = 0x000002BOOT_RSVD: origin = 0x000002, length = 0x0001AF/* Part of M0, BOOT rom will use this for stack */RAMM0: origin = 0x0001B1, length = 0x00024FRAMM1: 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 = 0x000800RAMD1: origin = 0x00C800, length = 0x000800RAMLS0: origin = 0x008000, length = 0x000800RAMLS1: origin = 0x008800, length = 0x000800RAMLS2: origin = 0x009000, length = 0x000800RAMLS3: origin = 0x009800, length = 0x00800RAMLS4: origin = 0x00A000, length = 0x000800
//RAMLS5: origin = 0x00A800, length = 0x000800
//RAMLS6: origin = 0x00B000, length = 0x000800
//RAMLS7: origin = 0x00B800, length = 0x000800RAMLS5_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,有好多不懂。

Yale Li:

第一个信息显示你为CLA分配的运行空间压根就没有被使用。

load start/end、run start/end分别对应的是什么?

,

TFTMing:

Yale Li 说:第一个信息显示你为CLA分配的运行空间压根就没有被使用。

那个是因为编译器编译时判断运行RAM空间不够,没有编译成功,运行RAM也就没有被分配,所以报错。

Yale Li 说:load start/end、run start/end分别对应的是什么?

这个要怎么看对应的是啥,还不太懂你的意思。

,

Yale Li:

就是你上传的最后一段linker代码中,那些宏对应的具体地址是什么

,

TFTMing:

Yale Li 说:就是你上传的最后一段linker代码中,那些宏对应的具体地址是什么

abs00000cd2Cla1funcsLoadSize000088000Cla1funcsLoadStart00000a800Cla1funcsRunStart
000088cd2Cla1funcsLoadEnd

abs00000000Cla1ConstLoadSize000008800Cla1ConstLoadStart000008800Cla1ConstRunStart00000ab18Cla1Task100000b45eCla1Task200000b470Cla1Task300000b482Cla1Task400000b494Cla1Task500000b4a6Cla1Task600000b4b8Cla1Task700000b4caCla1Task8000088cd2Cla1funcsLoadEnd

我在cla上用了双精度浮点型,发现cla调用rts2800_fpu64_eabi.lib库才导致代码空间变大,取消双精度浮点型后就没有了,但是经过测试发现在cla中一个简单的赋值语句都占用了40多个字节。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28388D: 关于CLA内存空间的问题
分享到: 更多 (0)