下面是我的链接器 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