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:链接 cmd 文件中的库。

Guru**** 2384630 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1201284/tms320f28386s-libraries-in-link-cmd-file

器件型号:TMS320F28386S

下面是我的链接器 cmd 文件。 在第86行、我选择整个库作为输入。 但我不希望所有 obj 文件都只具有 FlashStateMachine.obj。 但当我切换到使用线路87时、它不起作用。 当我使用行87配置进行调试时、我的函数位于闪存地址。 我使用"TI 链接器命令文件入门"中的第87行格式、

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.
//===========================================================================
*/

谢谢。

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John:  

    请说明"它不起作用"是什么意思。  您是否希望将其加载到 RAMGS10_15?  如果是这样、应用程序代码应该在硬件上把它复制到 RAM 区域。  

    此致

    Siddharth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。

    我很抱歉没有提及这份副本。

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

    因为它在我使用时正常工作(该函数正常执行)

    -- library = F2838x_C28x_FlashAPI.lib (.text)

    我想副本可以正常工作。 将鼠标悬停在函数名称上会显示 RAM 地址。

    空间

    F2838x_C28x_FlashAPI.lib 相关 (.text)

    不管用。 将光标悬停在函数名称上会显示闪存地址。

    我希望以这种方式指定、以便仅在这一个目标文件中获取函数。

    祝你一切顺利。

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John:  

    非常感谢您的详细信息。  

    会将该查询转发给 Code Composer Studio 团队进行查看。

    此致

    Siddharth  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉耽误你的时间。

    请移动的所有行 FLASH_API 将输出段更改成了的开头 部分 指令。  如果这样不起作用、请 在下一篇文章中附加链接器映射文件。  论坛将接受该文件、请添加文件扩展名 .txt 反馈回路。

    谢谢。此致、

    -George.