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