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.

TMS320F28386S: Libraries in link cmd file.

Part Number: TMS320F28386S


Below is my linker cmd file. On line 86 I select a whole library as an input. But I did not want all of the obj files only FlashStateMachine.obj. But when I switched to use line 87 it did not work. When I debugged using the line 87 configuration my functions were at flash addresses. I took the line 87 format from "TI Linker Command File Primer",

software-dl.ti.com/.../sdto_cgt_Linker-Command-File-Primer.html

MEMORY
{

   BOOT_RSVD        : origin = 0x000002, length = 0x0001AE     /* Part of M0, BOOT rom will use this for stack */
   RAMM0_1          : origin = 0x0001B0, length = 0x000648
   // RAMM1_RSVD       : origin = 0x0007F8, length = 0x000008         /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
   CLA_MSGRAMLOW    : origin = 0x001480, length = 0x000080
   CLA_MSGRAMHIGH   : origin = 0x001500, length = 0x000080
   RAMD0_1          : origin = 0x00C000, length = 0x001000
   RAMLS0           : origin = 0x008000, length = 0x000800
   RAMLS1_5         : origin = 0x008800, length = 0x002800
   RAMLS6           : origin = 0x00B000, length = 0x000800
   RAMLS7           : origin = 0x00B800, length = 0x000800
   RAMGS0_1         : origin = 0x00D000, length = 0x002000
   RAMGS2_4         : origin = 0x00F000, length = 0x003000
   RAMGS5_6         : origin = 0x012000, length = 0x002000
   RAMGS7           : origin = 0x014000, length = 0x001000
   RAMGS8_9         : origin = 0x015000, length = 0x002000
   RAMGS10_15       : origin = 0x017000, length = 0x005FF8
   // RAMGS15_RSVD     : origin = 0x01CFF8, length = 0x000008         /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */

#ifdef __TI_COMPILER_VERSION__
   #if __TI_COMPILER_VERSION__ >= 20012000
GROUP {      /* GROUP memory ranges for crc/checksum of entire flash */
   #endif
#endif
   /* BEGIN is used for the "boot to Flash" bootloader mode   */
   BEGIN            : origin = 0x080000, length = 0x000002
   /* Flash sectors */
   FLASH0           : origin = 0x080002, length = 0x001FFE  /* on-chip Flash */
   FLASH1           : origin = 0x082000, length = 0x002000  /* on-chip Flash */
   FLASH2_5         : origin = 0x084000, length = 0x014000  /* on-chip Flash */
   FLASH6           : origin = 0x098000, length = 0x008000  /* on-chip Flash */
   FLASH7           : origin = 0x0A0000, length = 0x008000  /* on-chip Flash */
   FLASH8           : origin = 0x0A8000, length = 0x008000  /* on-chip Flash */
   FLASH9           : origin = 0x0B0000, length = 0x008000  /* on-chip Flash */
   FLASH10_11       : origin = 0x0B8000, length = 0x004000  /* on-chip Flash */
   FLASH12_13       : origin = 0x0BC000, length = 0x003FF0  /* on-chip Flash */
   // FLASH13_RSVD     : origin = 0x0BFFF0, length = 0x000010    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
#ifdef __TI_COMPILER_VERSION__
  #if __TI_COMPILER_VERSION__ >= 20012000
}  crc(_table_name, algorithm=C28_CHECKSUM_16)
  #endif
#endif

   CPUTOCMRAM      : origin = 0x039000, length = 0x000800
   CMTOCPURAM      : origin = 0x038000, length = 0x000800
   CPU1TOCPU2RAM   : origin = 0x03A000, length = 0x000800
   CPU2TOCPU1RAM   : origin = 0x03B000, length = 0x000800

   RESET            : origin = 0x3FFFC0, length = 0x000002

   EMIF1_CS0n      : origin = 0x80000000, length = 0x01000000
}

SECTIONS
{
   codestart           : > BEGIN, ALIGN(4)
   .text               : > FLASH2_5, ALIGN(4)
   .cinit              : > FLASH1, ALIGN(4)
   .switch             : > FLASH1, ALIGN(4)
   .reset              : > RESET, TYPE = DSECT /* not used, */
   .stack              : > RAMM0_1

      lfuFuncsCpu1Cpu1 :  LOAD = FLASH6 | FLASH7 | FLASH8
	                       //RUN = RAMLS1_5 | RAMLS6 | RAMLS7,
	                       RUN = RAMGS10_15,
		                   LOAD_START(lfuFuncsCpu1Cpu1LoadStart),
		                   LOAD_SIZE (lfuFuncsCpu1Cpu1LoadSize),
		                   LOAD_END  (lfuFuncsCpu1Cpu1LoadEnd),
		                   RUN_START (lfuFuncsCpu1Cpu1RunStart),
		                   RUN_SIZE  (lfuFuncsCpu1Cpu1RunSize),
		                   RUN_END   (lfuFuncsCpu1Cpu1RunEnd),
		                   ALIGN(8)

		flash_api : LOAD = FLASH6 | FLASH7 | FLASH8,
	                       RUN = RAMGS10_15,
	                       LOAD_START(flash_apiLoadStart),
		                   LOAD_SIZE (flash_apiLoadSize),
		                   LOAD_END  (flash_apiLoadEnd),
		                   RUN_START (flash_apiRunStart),
		                   RUN_SIZE  (flash_apiRunSize),
		                   RUN_END   (flash_apiRunEnd),
		                   ALIGN(8)
					{
						--library = F2838x_C28x_FlashAPI.lib(.text)
						//F2838x_C28x_FlashAPI.lib<FlashStateMachine.obj>(.text)
					}


#if defined(__TI_EABI__)
   .init_array      : > FLASH1, ALIGN(4)
   .bss             : > RAMGS2_4
   .bss:output      : > RAMGS2_4
   .bss:cio         : > RAMGS2_4
   .data            : > RAMGS5_6
   .sysmem          : > RAMGS2_4
   /* Initalized sections go in Flash */
   .const           : > FLASH12_13, ALIGN(4)
#else
   .pinit           : > FLASH1, ALIGN(4)
   .ebss            : > RAMGS2_4
   .esysmem         : > RAMGS2_4
   .cio             : > RAMGS2_4
   /* Initalized sections go in Flash */
   .econst          : >> FLASH12_13, ALIGN(4)
#endif

   .farbss          : > EMIF1_CS0n
   .farconst        : > EMIF1_CS0n
   .em1_cs0         : > EMIF1_CS0n

/*** CLA Compiler Required Sections ***/
   .scratchpad         : > RAMLS7                /* Scratchpad memory for the CLA C Compiler */
   .const_cla          : > RAMLS7

   ramgs0 : > RAMGS0_1, type=NOINIT
   
   MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT
   MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT
   MSGRAM_CPU_TO_CM    : > CPUTOCMRAM, type=NOINIT
   MSGRAM_CM_TO_CPU    : > CMTOCPURAM, type=NOINIT

   #if defined(__TI_EABI__)
       .TI.ramfunc : {} LOAD = FLASH0,
                        RUN = RAMLS0,
                        LOAD_START(RamfuncsLoadStart),
                        LOAD_SIZE(RamfuncsLoadSize),
                        LOAD_END(RamfuncsLoadEnd),
                        RUN_START(RamfuncsRunStart),
                        RUN_SIZE(RamfuncsRunSize),
                        RUN_END(RamfuncsRunEnd),
                        ALIGN(4)
    #else
       .TI.ramfunc : {} LOAD = FLASH0,
                        RUN = RAMLS0,
                        LOAD_START(_RamfuncsLoadStart),
                        LOAD_SIZE(_RamfuncsLoadSize),
                        LOAD_END(_RamfuncsLoadEnd),
                        RUN_START(_RamfuncsRunStart),
                        RUN_SIZE(_RamfuncsRunSize),
                        RUN_END(_RamfuncsRunEnd),
                        ALIGN(4)
    #endif

   DataBufferSection   : > RAMGS7, ALIGN(4)
   LogSection          : > RAMD0_1, ALIGN(4)
   ParamSection        : > RAMGS8_9, ALIGN(4)
   ClaToCpuMsgRAM      : > CLA_MSGRAMLOW              /* Link to CLA Message RAM */
   CpuToClaMsgRAM      : > CLA_MSGRAMHIGH             /* Link to CLA Message RAM */
   ClaData             : > RAMLS6                     /* Link to CLA Data RAM */
   .bss_cla            : > RAMLS6                     /* Link to CLA Data RAM */

   /* Link to CLA Program RAM */
   Cla1Prog            : LOAD = FLASH10_11,
                         RUN = RAMLS1_5,
                         LOAD_START(ClaProgLoadStart),
                         RUN_START(ClaProgRunStart),
                         LOAD_SIZE(ClaProgLoadSize) ,
                         ALIGN(4)

   /* crc/checksum section configured as COPY section to avoid including in executable */
   .TI.memcrc          : type = COPY

}

/*
//===========================================================================
// End of file.
//===========================================================================
*/

Thanks,

John

  • John, 

    Pls clarify on what do you mean by "it did not work".  Are you expecting it to be loaded to RAMGS10_15?  If so, the application code should explicitily copy it to RAM regions. 

    Best Regards

    Siddharth

  • Thanks for the reply.

    My apologies for not mentioning the copy.

        case KERNEL_CPU1_CPU1:
            memcpy(&lfuFuncsCpu1Cpu1RunStart, &lfuFuncsCpu1Cpu1LoadStart, (size_t)&lfuFuncsCpu1Cpu1LoadSize);
            memcpy(&flash_apiRunStart, &flash_apiLoadStart, (size_t)&flash_apiLoadSize);
            flashKernelCpu1Main();
            break;

    Since it works (the function executes properly) when I use

    --library = F2838x_C28x_FlashAPI.lib(.text)

    I think the copy is working. Hovering over the function name shows a ram address.

    When I use

    F2838x_C28x_FlashAPI.lib<FlashStateMachine.obj>(.text)

    it does not work. Hovering over the function name shows a flash address.

    I wish to specify it this way to only get the functions in this one object file.

    Best wishes,

    John

  • John, 

    Thanks for the details. 

    Will forward the query to the Code Composer Studio team to look into it.

    Best Regards

    Siddharth 

  • I apologize for the delay.

    Please move all the lines for the flash_api output section to the beginning of the SECTIONS directive.  If that doesn't work, then please attach the linker map file to your next post.  So the forum will accept it, please add the file extension .txt to it.

    Thanks and regards,

    -George