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: How compiler keeps .cla source code at a specific section

Part Number: TMS320F28388D

Dear all,

For a flash build C28x-CLA1 program , i came to an understanding that bfore we run cla we need to copy cla programs to configured memory RAM .This copy using memcpy() function is earlier seen by using pragma command to specify to which section of flash the code should reside and to which portion of ram we will load it while running . But in CLA example for epwm i cannot find usage of Ca1Prog section specification in .cla source file. 

How we are loading cla code into Ls ram ?. Should nt we specify the section by some method like

__interrupt void cpuTimer0ISR(void);
#pragma CODE_SECTION(cpuTimer0ISR, "isrfunc")

in the above code we are specifying isrfunc section for timerisr function.

and this linker words will make it run. at RAMGS15

isrfunc : LOAD = FLASH0| FLASH1,
RUN = RAMGS15,
LOAD_START(isrfuncLoadStart),
LOAD_END(isrfuncLoadEnd),
RUN_START(isrfuncRunStart),
LOAD_SIZE(isrfuncLoadSize)

but am not able to find any such method of pragma usage for the Cla1Prog section in the pwm cla example in c2000 .

how the compiler comes to know it should keep the functions in .cla source file in FLASH4 only

Cla1Prog : LOAD = FLASH4,
RUN = RAMLS5,
LOAD_START(Cla1funcsLoadStart),
LOAD_END(Cla1funcsLoadEnd),
RUN_START(Cla1funcsRunStart),
LOAD_SIZE(Cla1funcsLoadSize),
ALIGN(8)

also please give an idea on following code from cmd file

/* CLA C compiler sections */
//
// Must be allocated to memory the CLA has write access to
//
CLAscratch :
{ *.obj(CLAscratch)
. += CLA_SCRATCHPAD_SIZE;
*.obj(CLAscratch_end) } > RAMLS1

.scratchpad : > RAMLS1
.bss_cla : > RAMLS1
cla_shared : > RAMLS1
#if defined(__TI_EABI__)
.const_cla : LOAD = FLASH2,
RUN = RAMLS1,
RUN_START(Cla1ConstRunStart),
LOAD_START(Cla1ConstLoadStart),
LOAD_SIZE(Cla1ConstLoadSize)
#else
.const_cla : LOAD = FLASH2,
RUN = RAMLS1,
RUN_START(_Cla1ConstRunStart),
LOAD_START(_Cla1ConstLoadStart),
LOAD_SIZE(_Cla1ConstLoadSize)

Thanks and regards,

Stevin Martin

cla_cmd.txt
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CLA_SCRATCHPAD_SIZE = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
MEMORY
{
/* 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 = 0x000800
RAMLS4 : origin = 0x00A000, length = 0x000800
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • How we are loading cla code into Ls ram ?

    You need some initialisation code like this:

    Fullscreen
    1
    2
    3
    4
    5
    6
    extern uint32_t Cla1funcsRunStart, Cla1funcsLoadStart, Cla1funcsLoadSize;
    //
    // Copy over code from FLASH to RAM
    //
    memcpy((uint32_t *)&Cla1funcsRunStart, (uint32_t *)&Cla1funcsLoadStart,
    (uint32_t)&Cla1funcsLoadSize);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    how the compiler comes to know it should keep the functions in .cla source file

    Program code in your CLA file is automatically allocated to output section Cla1Prog. You can then choose where (i.e. which FLASH sector).to locate Cla1Prog in your linker file.

  • Hi Stevin,

    Compiler will take care of placing the CLA code/data/const to separate sections like Cla1Prog, bss_cla, const_cla etc. All the files with extension .cla is compiled by CLA compiler and sections are defined accordingly.

    Regards,

    Veena

  • Should nt we specify the section by some method like

    No you don't need a #pragma section because the CLA compiler always uses output section "Cla1Prog". The section name is hardwired into the compiler so you don't need to specify anything.

  • Hello all,

    Soooo thank you for all the fast response, I get it now.

    Thanks and regards,

    Stevin Martin