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.
I am using L3DPSARAM (size 0x1000) for my CLA Program RAM.
I am using the CLA math library as well ... but this makes my CLA program too big to fit in L3DPSARAM.
Once I compile everything, the size is too big and I get:
"../My.cmd", line 97: error #10099-D: program will not fit into available memory. run placement with alignment/blocking fails for section "Cla1Prog" size 0x1192 page 0. Available memory ranges:
L3DPSARAM size: 0x1000 unused: 0x1000 max hole: 0x1000
error #10010: errors encountered during linking; "My.out" not built
So I realized I don't need all the source in CLA math library, so I excluded all the functions I'm not using, and only kept CLAsin and CLAcos .asm source files.
This allows me to compile Cla1Prog to a smaller size that can fit.
However, what if I want to use all the functions in the CLA math library? How can I make the program fit or can I relocate it to another memory area?
For reference ... when I do InitCla() from main(), I do the following
memcpy(&Cla1funcsRunStart, &Cla1funcsLoadStart, (Uint32)&Cla1funcsLoadSize); memcpy(&Cla1mathTablesRunStart, &Cla1mathTablesLoadStart, (Uint32)&Cla1mathTablesLoadSize);
Also, here is My.cmd file for reference:
/* User Configurable Options */ #define USE_CLA_C 1 /* 1 = Using CLA C-compiler, 0 = ASM only */ _Cla1Prog_Start = _Cla1funcsRunStart; -heap 0x400 -stack 0x400 /* Define size for the CLA scratchpad area that will be used by the CLA compiler for local symbols and temporary * variables; also force references to the special symbols that mark the scratchpad area. */ #if USE_CLA_C == 1 CLA_SCRATCHPAD_SIZE = 0x100; --undef_sym=__cla_scratchpad_end --undef_sym=__cla_scratchpad_start #endif MEMORY { PAGE 0: /* Program Memory */ BEGIN_M0 : origin = 0x000000, length = 0x000002 /* Part of M0SARAM - used for "Boot to M0" mode */ L3DPSARAM : origin = 0x009000, length = 0x001000 /* L3 DPSARAM, CSM secure, CLA Prog RAM */ L4SARAM : origin = 0x00A000, length = 0x002000 /* L4 SARAM, CSM secure */ OTP (R) : origin = 0x3D7800, length = 0x000400 /* OTP */ FLASH_ABCDEFGH (R) : origin = 0x3D8000, length = 0x01FF80 /* FLASH, All sectors combined */ CSM_RSVD (R) : origin = 0x3F7F80, length = 0x000076 /* Part of FLASH_A - reserved when CSM is in use */ BEGIN_FLASH (R) : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASH_A - used for "Jump to flash" mode */ PASSWORDS (R) : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASH_A - CSM password locations */ FPUTABLES (R) : origin = 0x3FD860, length = 0x0006A0 /* Part of Boot ROM */ IQTABLES (R) : origin = 0x3FDF00, length = 0x000B50 /* Part of Boot ROM */ IQTABLES2 (R) : origin = 0x3FEA50, length = 0x00008C /* Part of Boot ROM */ IQTABLES3 (R) : origin = 0x3FEADC, length = 0x0000AA /* Part of Boot ROM */ RESET (R) : origin = 0x3FFFC0, length = 0x000002 /* part of Boot ROM */ PAGE 1 : /* Data Memory */ M0SARAM : origin = 0x000002, length = 0x0003FE /* M0 SARAM */ M1SARAM : origin = 0x000400, length = 0x000400 /* M1 SARAM */ CLAMSGRAM1 : origin = 0x001480, length = 0x000080 /* Part of PF0 - CLA to CPU Message RAM */ CLAMSGRAM2 : origin = 0x001500, length = 0x000080 /* Part of PF0 - CPU to CLA Message RAM */ L0DPSARAM : origin = 0x008000, length = 0x000800 /* L0 DPSARAM, CSM secure, CLA Data RAM 2 */ L1DPSARAM : origin = 0x008800, length = 0x000400 /* L1 DPSARAM, CSM secure, CLA Data RAM 0 */ L2DPSARAM : origin = 0x008C00, length = 0x000400 /* L2 DPSARAM, CSM secure, CLA Data RAM 1 */ L5DPSARAM : origin = 0x00C000, length = 0x002000 /* L5 DPSARAM, DMA RAM 0 */ L6DPSARAM : origin = 0x00E000, length = 0x002000 /* L6 DPSARAM, DMA RAM 1 */ L7DPSARAM : origin = 0x010000, length = 0x002000 /* L7 DPSARAM, DMA RAM 2 */ L8DPSARAM : origin = 0x012000, length = 0x002000 /* L8 DPSARAM, DMA RAM 3 */ } SECTIONS { /* Compiler Required Sections */ /* Program memory (PAGE 0) sections */ .text : > FLASH_ABCDEFGH, PAGE = 0 .cinit : > FLASH_ABCDEFGH, PAGE = 0 .const : > FLASH_ABCDEFGH, PAGE = 0 .econst : > FLASH_ABCDEFGH, PAGE = 0 .pinit : > FLASH_ABCDEFGH, PAGE = 0 .reset : > RESET, PAGE = 0, TYPE = DSECT /* We are not using the .reset section */ .switch : > FLASH_ABCDEFGH, PAGE = 0 /* Data Memory (PAGE 1) sections */ .bss : > M0SARAM, PAGE = 1 .ebss : > M0SARAM, PAGE = 1 .cio : > M0SARAM, PAGE = 1 .stack : > M1SARAM, PAGE = 1 .sysmem : > M1SARAM, PAGE = 1 .esysmem : > M1SARAM, PAGE = 1 .bss_cla : > L1DPSARAM, PAGE = 1 .const_cla : > L2DPSARAM, PAGE = 1 /* User Defined Sections */ codestart : > BEGIN_FLASH, PAGE = 0 /* Used by file CodeStartBranch.asm */ dmaMemBufs : > L5DPSARAM, PAGE = 1 /* Link to DMA accessible memory */ csm_rsvd : > CSM_RSVD, PAGE = 0 /* Used by file Passwords.asm */ passwords : > PASSWORDS, PAGE = 0 /* Used by file Passwords.asm */ ClaToCpuMsgRAM : > CLAMSGRAM1, PAGE = 1 /* Link to PF0 - CLA Message RAM */ CpuToClaMsgRAM : > CLAMSGRAM2, PAGE = 1 /* Link to PF0 - CLA Message RAM */ /* Section secureRamFuncs used by file Flash.c. */ secureRamFuncs : LOAD = FLASH_ABCDEFGH, PAGE = 0 /* Load to flash, run from CSM secure RAM */ RUN = L4SARAM, PAGE = 0 LOAD_START(_secureRamFuncs_loadstart), LOAD_SIZE(_secureRamFuncs_loadsize), RUN_START(_secureRamFuncs_runstart) /* Section Cla1Prog used by file Cla.c */ Cla1Prog : LOAD = FLASH_ABCDEFGH, PAGE = 0 /* Load to flash, run from CLA Prog RAM */ RUN = L3DPSARAM, PAGE = 0 LOAD_START(_Cla1funcsLoadStart), LOAD_END(_Cla1funcsLoadEnd), LOAD_SIZE(_Cla1funcsLoadSize), RUN_START(_Cla1funcsRunStart) CLA1mathTables : LOAD = FLASH_ABCDEFGH, PAGE = 0 /* Load to flash, run from CLA Prog RAM */ RUN = L0DPSARAM, PAGE = 1 LOAD_START(_Cla1mathTablesLoadStart), LOAD_END(_Cla1mathTablesLoadEnd), LOAD_SIZE(_Cla1mathTablesLoadSize), RUN_START(_Cla1mathTablesRunStart) #if USE_CLA_C == 1 CLAscratch : { *.obj(CLAscratch) /* Scratchpad memory for the CLA C Compiler */ . += CLA_SCRATCHPAD_SIZE; *.obj(CLAscratch_end) } > L2DPSARAM, PAGE = 1 #endif /* Math Tables */ FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD IQmath : > FLASH_ABCDEFGH, PAGE = 0 IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD /* IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD { IQmath_fpu32.lib<IQNexpTable.obj> (IQmathTablesRam) } IQmathTables3 :> IQTABLES3, PAGE = 0, type = NOLOAD { IQmath_fpu32.lib<IQNasinTable.obj> (IQmathTablesRam) }*/s } /* End of file */
Hi,
For the f28069, the program RAM is RAMLS3 and the code size is limited to 0x1000. What you could do is probably switch out chunks of code from flash to ram; that means you would have to keep reprogramming the MVECT registers
Hello Vishal,
I have the same problem. My CLA program RAM is already full. Can you give me a minimal code example for copying the code and reprogramming the MVECT registers on the go?
Thanks!
EDIT: Nevermind. Got it working.