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.

[参考译文] CCS/MSP430FR5992:链接器主文件放置

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/770861/ccs-msp430fr5992-linker-main-file-placement

器件型号:MSP430FR5992
主题中讨论的其他器件:MSP430FR59941

工具/软件:Code Composer Studio

尊敬的 Sirs:

   有一个包含多个文件模块的工程、但需要将 main.obj 文件首先链接到主框架存储器中。

它所做的是有时将 main()放置在0x10000处,有时将较大的函数放置在0x10000处,将 main()放置得更远。

您能否查看链接 cmd 文件并对其进行修改以将 main.obj 放在首位?

谢谢

John

/*********
*
*版权所有(C) 2012 - 2017 Texas Instruments Incorporated - http://www.ti.com/
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
* 源代码的重新分发必须保留上述版权
* 注意、此条件列表和以下免责声明。
*
* 二进制形式的再发行必须复制上述版权
* 请注意、中的此条件列表和以下免责声明
* 随提供的文档和/或其他材料
 *分发。
*
* 德州仪器公司的名称和名称均不相同
* 其贡献者可用于认可或推广衍生产品
* 未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者提供
*"按原样"以及任何明示或暗示的保证、包括但不包括
*仅限于对适销性和适用性的暗示保证
*一项特定目的不予承认。 在任何情况下、版权均不得
*所有者或贡献者应对任何直接、间接、偶然或
*特殊、惩戒性或后果性损害(包括但不包括)
*仅限于采购替代货物或服务;丧失使用、
*数据或利润;或业务中断)
*责任理论、无论是合同责任、严格责任还是侵权行为
*(包括疏忽或其他)因使用而以任何方式产生
*、即使被告知可能会发生此类损坏。
*
*德州仪器 MSP430FR59941的默认链接器命令文件
*
(小部分 /
/********* /
/*                                       *
/*  用法: lnk430   -o -m lnk.cmd   */
/*       cl430  z -o -m lnk.cmd   */
/*                                       *
/*------------------ *
/*这些链接器选项仅用于命令行链接。  对于 IDE 链接、 */
/*您应该在“项目属性”中设置链接器选项           *
/*-c.                         使用 C 约定进行链接 */
/*-stack 0x0100                   软件栈大小    */
/*-heap  0x0100                   堆区域大小       *
/*                                       *
/*------------------ *
/* 1.201 */
/*------------------ *
/ /
/*指定系统内存映射                       *
/ /
存储器
  TINYRAM          :origin = 0xA、length = 0x16
  BSL            :origin = 0x1000、length = 0x800
  信息系统           :origin = 0x1800,length = 0x80
  信息系统           :origin = 0x1880、length = 0x80
  信息           :origin = 0x1900,length = 0x80
  INFOA           :origin = 0x1980、length = 0x80
  RAM            :origin = 0x1C00,length = 0x1000
  FRAM           :origin = 0x4000、length = 0xBF80
  FRAM2           :origin = 0x10000、length = 0x34000
  JTAGSIGNATURE       :origin = 0xFF80、length = 0x0004、fill = 0xFFFF
  BSLSIGNATURE       :origin = 0xFF84、length = 0x0004、fill = 0xFFFF
  IPESIGNATURE       :origin = 0xFF88、length = 0x0008、fill = 0xFFFF
  INT00           :origin = 0xFF90,length = 0x0002
  INT01           :origin = 0xFF92,length = 0x0002
  INT02           :origin = 0xFF94,length = 0x0002
  INT03           :origin = 0xFF96、length = 0x0002
  INT04           :origin = 0xFF98,length = 0x0002
  INT05           :origin = 0xFF9A,length = 0x0002
  INT06           :origin = 0xFF9C,length = 0x0002
  INT07           :origin = 0xFF9E、length = 0x0002
  INT08           :origin = 0xFFA0、length = 0x0002
  INT09           :origin = 0xFFA2、length = 0x0002
  INT10.           :origin = 0xFFA4、length = 0x0002
  INT11.           :origin = 0xFFA6、length = 0x0002
  INT12.           :origin = 0xFFFA8、length = 0x0002
  INT13.           :origin = 0xFFAA、length = 0x0002
  INT14           :origin = 0xFFAC,length = 0x0002
  INT15.           :origin = 0xFFAE、length = 0x0002
  内部16.           :origin = 0xFFB0,length = 0x0002
  INT17.           :origin = 0xFFB2、length = 0x0002
  INT18           :origin = 0xFFB4,length = 0x0002
  INT19.           :origin = 0xFFB6、length = 0x0002
  INT20.           :origin = 0xFFB8、length = 0x0002
  INT21.           :origin = 0xFFBA,length = 0x0002
  INT22.           :origin = 0xFFBC,length = 0x0002
  INT23           :origin = 0xFFBE,length = 0x0002
  INT24           :origin = 0xFFC0、length = 0x0002
  INT25.           :origin = 0xFFC2,length = 0x0002
  INT26.           :origin = 0xFFC4,length = 0x0002
  INT27.           :origin = 0xFFC6、length = 0x0002
  INT28           :origin = 0xFFC8,length = 0x0002
  INT29           :origin = 0xFFCA,length = 0x0002
  INT30           :origin = 0xFFCC,length = 0x0002
  INT31           :origin = 0xFFCE,length = 0x0002
  Int32.           :origin = 0xFFD0、length = 0x0002
  INT33           :origin = 0xFFD2,length = 0x0002
  INT34           :origin = 0xFFD4、length = 0x0002
  INT35.           :origin = 0xFFD6、length = 0x0002
  INT36           :origin = 0xFFD8、length = 0x0002
  INT37           :origin = 0xFFDA,length = 0x0002
  INT38           :origin = 0xFFDC,length = 0x0002
  INT39.           :origin = 0xFFDE,length = 0x0002
  INT40.           :origin = 0xFFE0、length = 0x0002
  INT41           :origin = 0xFFE2,length = 0x0002
  INT42.           :origin = 0xFFE4,length = 0x0002
  INT43           :origin = 0xFFE6,length = 0x0002
  INT44           :origin = 0xFFE8、length = 0x0002
  INT45.           :origin = 0xFFEA,length = 0x0002
  INT46           :origin = 0xFFEC,length = 0x0002
  INT47.           :origin = 0xFFEE,length = 0x0002
  INT48           :origin = 0xFFF0,length = 0x0002
  INT49           :origin = 0xFFF2,length = 0x0002
  INT50           :origin = 0xFFF4,length = 0x0002
  INT51.           :origin = 0xFFF6、length = 0x0002
  INT52.           :origin = 0xFFF8,length = 0x0002
  INT53           :origin = 0xFFFA,length = 0x0002
  INT54.           :origin = 0xFFFC,length = 0x0002
  复位           :origin = 0xFFFE,length = 0x0002
/ /
/*指定 LEA 存储器映射                         *
/ /
#define LEASTACK_SIZE  0x138
存储器
  LEARAM          :origin = 0x2C00,length = 0x1000 - LEASTACK_SIZE
  LEASTACK         :origin = 0x3C00 - LEASTACK_SIZE、length = LEASTACK_SIZE
/ /
/*指定段分配到内存中                *
/ /
部分
  组(RW_IPE)
  {
    组(READ_WRITE_MEMORY)
    {
      .TI.persistent:{}        对于#pragma PERSISTENT       *
      .cio       :{}        /* C I/O 缓冲器            *
      sysmem     :{}        /*动态内存分配区域  */
    } PALIGN (0x0400)、RUN_START (fram_rw_start)
    组(IPENCAPSULATED_MEMORY)
    {
      .ipestruct   :{}        /* IPE 数据结构        *
      IPE       :{}        /* IPE               *
      .ipe_const   :{}        /* IPE 受保护的常量     *
      .ipe:_isr   :{}        /* IPE ISR             *
    } PALIGN (0x0400)、RUN_START (fram_IPE_START) RUN_END (fram_IPE_END) RUN_END (fram_Rx_START)
  }> 0x4000
  .cinit       :{}> FRAM      /*初始化表        *
  二进制文件       :{}> FRAM      /*引导时初始化表  */
  .pinit       :{}> FRAM      /* C++构造函数表       *
  init_array    :{} > FRAM      /* C++构造函数表       *
  .mspabi.exidx   :{}> FRAM      /* C++构造函数表       *
  .mspabi.extab   :{}> FRAM      /* C++构造函数表       *
  .text:_ISR     :{}> FRAM      /*代码 ISR              *
#ifndef __large_data_model__
  .const       :{}> FRAM       /*常量数据            *
其他
  .const       :{}>> FRAM | FRAM2 /*常量数据            *
#endif
#ifndef __large_code_model__
  .text        :{}> FRAM       /*代码                *
其他
  .text        :{main.obj (.text)
   }>> FRAM2 | FRAM /*代码  {main.obj (.text)}John             *
#endif
  #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
      #ifndef __large_code_model__
        .TI.ramfunc:{} load=FRAM、run=RAM、table (BINIT)
      其他
        .TI.ramfunc:{} load=FRAM | FRAM2、run=RAM、table (BINIT)
      #endif
    #endif
  #endif
  jtagsignature   :{}> JTAGSIGNATURE
  bslsignature    :{}> BSLSIGNATURE
  组(signature_SHAREDMEMORY)
  {
    ipesignature    :{}       /* IPE 签名            *
    .jtagpassword    :{}       /* JTAG 密码            *
  }> IPESIGNATURE
  .bss     :{}> RAM          /*全局和静态变量        *
  .data    :{}> RAM          /*全局和静态变量        *
  .TI.noinit :{}>RAM          /*用于#pragma noinit         *
  .stack   :{}> RAM (高)       /*软件系统堆栈        *
  tinyram  :{}> TINYRAM        /* Tiny RAM              *
  /* MSP430信息内存段*/
  infoA:type = NOINIT{}> INFOA
  infoB:type = NOINIT{}> INFOB
  infoC:type = NOINIT{}> INFOC
  infoD:type = NOINIT{}> infOD
  leaRAM   :{}> LEARAM         /* LEA RAM               *
  leaStack  :{}> LEASTACK (HIGH)/*   LEA STACK              *
  /* MSP430中断矢量*/
  .int00    :{}         > INT00
  .int01    :{}         > INT01
  .int02    :{}         > INT02
  .int03    :{}         > INT03
  .int04    :{}         > INT04
  .int05    :{}         > INT05
  .int06    :{}         > INT06
  .int07    :{}         > INT07
  .int08    :{}         > INT08
  .int09    :{}         > INT09
  .int10    :{}         > INT10
  .int11    :{}         > INT11
  .int12    :{}         > INT12
  .int13    :{}         > INT13
  .int14    :{}         > INT14
  .int15    :{}         > INT15
  .int16    :{}         > Int16
  .int17    :{}         > INT17
  LEA      :{*(.int18)}> INT18 type = VECT_init
  端口8     :{*(.int19)}> INT19类型= VECT_INIT
  PORT7.     :{*(.int20 )}> INT20 type = VECT_init
  EUSCI_B3   :{*(.int21)}> INT21类型= VECT_INIT
  EUSCI_B2   :{*(.int22)}> INT22类型= VECT_INIT
  EUSCI_B1   :{*(.int23)}> INT23类型= VECT_INIT
  EUSCI_A3   :{*(.int24)}> INT24 type = VECT_init
  EUSCI_A2   :{*(.int25)}> INT25类型= VECT_INIT
  PORT6.     :{*(.int26)}> INT26 type = VECT_init
  PORT5     :{*(.int27)}> INT27 type = VECT_init
  TIMER4_A1  :{*(.int28 )}> INT28 type = VECT_INIT
  TIMER4_A0  :{*(.int29)}> INT29 type = VECT_INIT
  AES256    :{*(.int30)}> INT30类型= VECT_INIT
  RTC_C     :{*(.int31 )}> INT31类型= VECT_INIT
  端口4.     :{*(.int32 )}> int32 type = VECT_init
  PORT3     :{*(.int33)}> INT33 type = VECT_init
  TIMER3_A1  :{*(.int34 )}> INT34 TYPE = VECT_INIT
  TIMER3_A0  :{*(.int35 )}> INT35 TYPE = VECT_INIT
  端口2     :{*(.int36)}> INT36 type = VECT_init
  TIMER2_A1  :{*(.int37 )}> INT37 TYPE = VECT_INIT
  TIMER2_A0  :{*(.int38 )}> INT38 TYPE = VECT_INIT
  端口1     :{*(.int39)}> INT39 type = VECT_init
  Timer1_A1  :{*(.int40)}> INT40 type = VECT_init
  Timer1_A0  :{*(.int41)}> INT41 type = VECT_init
  DMA      :{*(.int42 )}> INT42 type = VECT_init
  EUSCI_A1   :{*(.int43)}> INT43类型= VECT_INIT
  TIMER0_A1  :{*(.int44 )}> INT44 TYPE = VECT_INIT
  TIMER0_A0  :{*(.int45)}> INT45 type = VECT_INIT
  ADC12_B   :{*(.int46)}> INT46 type = VECT_init
  EUSCI_B0   :{*(.int47)}> INT47类型= VECT_INIT
  EUSCI_A0   :{*(.int48)}> INT48类型= VECT_INIT
  WDT      :{*(.int49)}> INT49类型= VECT_INIT
  TIMER0_B1  :{*(.int50 )}> INT50 TYPE = VECT_INIT
  TIMER0_B0  :{*(.int51 )}> INT51 TYPE = VECT_INIT
  Comp_E    :{*(.int52)}> INT52类型= VECT_INIT
  联合国管理信息系统      :{*(.int53 )}>INT53 type = VECT_init
  SYSNMI    :{*(.int54 )}> INT54 TYPE = VECT_INIT
  重置    :{}         >复位 /* MSP430复位矢量      *
/ /
/* MPU/IPE 特定内存段定义                 *
/ /
#ifdef _IPE_ENABLE
  #define IPE_MPUIPLOCK 0x0080
  #define IPE_MPUIPENA 0x0040
  #define IPE_MPUIPPUC 0x0020
  //评估 IP 封装控制设置的设置
  #if defined (_IPE_ASSERTPUC1)
    #if defined (_IPE_LOCK)&&(_IPE_ASSERTPUC1 == 0x08)
      FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPPUC |IPE_MPUIPLOCK);
    #elif defined (_IPE_LOCK)
      FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPLOCK);
    #Elif (_IPE_ASSERTPUC1 = 0x08)
      FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPPUC);
    其他
      FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA);
    #endif
  其他
    #if defined (_IPE_LOCK)
      FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPLOCK);
    其他
      FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA);
    #endif
  #endif
  //段定义
  #ifdef _ipe_manual          //用于在 GUI 中选择的自定义大小
    FRAM_IPE_Border1 =(_IPE_SEGB1>>4);
    FRAM_IPE_Border2 =(_IPE_SEGB2>>4);
  其他               //链接器生成的自动大小
    FRAM_IPE_Border2 = fRAM_IPE_END >> 4;
    FRAM_IPE_Border1 = fRAM_IPE_START >> 4;
  #endif
  FRAM_IPE_SETTINGS_STRUCT_ADDRESS = IPE_设置 结构>> 4;
  FRAM_IPE_CHECKSUM =~((fRAM_IPE_ENABLE_VALUE & fRAM_IPE_Border2 & fRAM_IPE_Border1)|(fRAM_IPE_ENABLE_VALUE &~fRAM_IPE_Border2 &~fRAM_IPE_ENABBorder1)|(~frAM_IPE_ENABLE_ENABLE_IPE_1和~FRAM_IPE_IPE_IPE_IPAM_Border1)|(~~FRAM_IPE_IPE_IPE_IPE_IPE_IPAM_IPE_IPE_IPAM_FRAM_IPE_IPE_IPE_IPE_1和 IPAM_IPAM_IPAM_Border1)
#endif
#ifdef _MPU_enable
  #define MPUPW (0xA500)  /* MPU 访问密码*/
  #define MPUENA (0x0001)  /* MPU 使能*
  #define MPULOCK (0x0002) /* MPU 锁定*/
  #define MPUSEGIE (0x0010)/* MPU 在段违反时启用 NMI */
  _MPU_ENABLE = 1;
  //段定义
  #ifdef _MPU_manual //用于在 GUI 中选择的自定义大小
    MPU_SEARD_Border1 =_MPU_SEGB1 >> 4;
    MPU_SEARD_Border2 =_MPU_SEGB2 >> 4;
    MPU_SAM_VALUE =(_MPU_SAM0 << 12)|(_MPU_SAM3 << 8)|(_MPU_SAM2 << 4)|_MPU_SAM1;
  #else //链接器生成的自动大小
    #ifdef _ipe_enable //如果项目中也使用 IPE
    //seg1 =任何读取+写入持久性变量
    //seg2 = IPE =读取+写入+执行访问
    //seg3 =代码、只读+只执行
      MPU_SEGM_Border1 = fRAM_IPE_START >> 4;
      MPU_SEGM_Border2 = fRAM_Rx_START >> 4;
      MPU_SAM_VALUE = 0x1573;// Info R、Seg3 RX、Seg2 rwx、Seg1 RW
    其他
      MPU_SEGM_Border1 = fRAM_Rx_START >> 4;
      MPU_SEGM_Border2 = fRAM_Rx_START >> 4;
      MPU_SAM_VALUE = 0x1513;// Info R、Seg3 RX、Seg2 R、Seg1 RW
    #endif
  #endif
  #ifdef _MPU_LOCK
    #ifdef _MPU_ENABLE_NMI
      MPU_ctl0_value = MPUPW | MPUENA | MPULOCK | MPUSEGIE;
    其他
      MPU_ctl0_value = MPUPW | MPUENA | MPULOCK;
    #endif
  其他
    #ifdef _MPU_ENABLE_NMI
      MPU_ctl0_value = MPUPW | MPUENA | MPUSEGIE;
    其他
      MPU_ctl0_value = MPUPW | MPUENA;
    #endif
  #endif
#endif
/ /
/*包括外设内存映射                       *
/ /
l msp430fr59941.cmd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请参阅文章 链接器命令文件入门。  在标题为"形成输出段"的子章节末尾、提供了一个示例、说明如何强制输入段成为输出段中的第一个输入段。

    谢谢、此致、

    乔治

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

    谢谢、George:

     

         现时的组别似乎均不合适,因此我加入本集团如下:

       (signature_SHAREDMEMORY)

       {

           ipesignature      :{}/*           IPE Signature                    *//

           .jtagpassword      :{}           /* JTAG 密码                    */

       }> IPESIGNATURE

     

          (INITIALMEMORY)

          {

                 main.obj (.text)

          }>(FRAM | FRAM2)

     

       .bss       :{}> RAM                 /*全局和静态变量             */

       .data      :{}>RAM                 /*全局和静态变量             */

       .TI.noinit :{}>RAM                 /* for #pragma noinit               */

       .stack     :{}> RAM (高)          /*软件系统堆栈            */

     

       tinyram   :{}> TINYRAM             /* Tiny R

     

    这会导致错误: 需要段类型(COPY、DSECT 或 NOLOAD)而不是".text"。

    然后删除了导致其编译的(.text)、但 main()仍位于0x13d84。  链接命令文件的方式  

    由 CCS 自动生成。

     

    我应该怎么做?

     

    John

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

    您好、George:

       为了促进此解决方案、我将生成一个测试项目、其中包含 main.c、FuncA.c 和 FuncB.c 模块。

    此项目已附加。  希望将 FuncA.obj 放置在 Fram 中、位置约为0x4800 (FRAM)、main 位于0x10000以上(FRAM2)。

    我尝试了几条指令(标记为 John)、但没有一条指令实现了这一目的。

       希望您能找到实现这一目标的方法。

    谢谢、e2e.ti.com/.../TestLinkCmd-2_2D00_12_2D00_19B.zip

    John

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

    当你说...

    [引用 user="John Moore39"]但需要将 main.obj 文件首先链接到主框架存储器[/quot]

    假设您希望首先链接 main.obj 中的代码。  如果 main.obj 定义了任何数据、则该数据的分配不应更改。  这意味着、只有来自 main.obj 的.text 段需要特殊处理。

    当你写的时候,你就在附近了。。。

    [引用用户="John Moore39"]

      .text        :{main.obj (.text)
       }>> FRAM2 | FRAM /*代码  {main.obj (.text)}John             *

    [/报价]

    写它...

    .text
    {
    main.obj (.text)
    *(.text)
    } >> FRAM2 | FRAM
    

    关于 CCS 自动生成链接器命令文件...  我知道它看起来是这样的。  一旦您告诉 CCS 您使用的是哪种处理器,它就会从类似的目录位置复制正确的链接器命令文件...

    C:\ti\ccsv8\ccs_base\msp430\include

    谢谢、此致、

    乔治

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

    e2e.ti.com/.../8863.TestLinkCmd-2_2D00_12_2D00_19B.zipThanks、George:

       这还不适用于实际项目、因此返回到所附的 TestLinkCfg 测试项目。

    希望 main 从>0x10000开始、AFE 从0x4800开始。

    结果是:

    这不运行:

      .text

      main.obj (.text)

      *(.text)

    }>> FRAM | FRAM2 //John/George

    这将一切都置于低 FRAM 中:

      .text

      main.obj (.text)

      *(.text)

    }>> FRAM | FRAM2 //John/George

    这会将 main 放置在0x4080、将 AFUN()放置在0x4104。  (希望 main 从>0x10000开始、AFE 从0x4800开始)

     .text

      FuncA.obj (.text)

      *(.text)

    }>> FRAM | FRAM2 // John/George

    此项目作为压缩文件附加。

    谢谢、

    John

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

    [引用用户="John Moore55926"]希望 main 从>0x10000开始,AFE 从0x4800开始。

    在 SECTIONS 指令的开头添加这两行...

    .text:main > 0x10000
    .text:AFun > 0x4800
    

    第一行创建一个名为.text:main 的输出段。  它将所有输入段与同名匹配。  只有一个这样的输入段、它来自 main.obj。  它被分配给硬编码地址0x10000。  第二行执行同样的操作、但对于功能 AFE。   

    与硬编码地址不同,在命令文件中更早地创建#define 名称可能更有意义...

    #define FRAM2_START 0x10000
    #define ANALE_NAME 0x4800
    

    然后使用它们。  在出现0x10000的地方、将其替换为 FRAM2_START。  它使代码能够自我记录。  而且、如果 FRAM2的开始发生变化(非常不可能、但可能)、那么您只需在一个位置进行更改。

    谢谢、此致、

    乔治

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

    谢谢、George:

       您肯定是一个救生员。

    它在 testlinkcfg proj 上工作、现在我要将其放入真实项目中。

    John

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

    e2e.ti.com/.../lnk_5F00_msp430fr5994.zipHiGeorge:

    嗯、这在实际项目中不起作用。 相反、它在0x8184放置 main、在0xdd8c 放置 AFun。
    相信代码小于64k、那么链接器可能没有使用大型模型??
    附件是压缩的链接命令文件。

    John

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

    嗯、这实际上在真正的项目中起了作用!!

    我将命令文件混合在一起、并更改了错误的命令文件。

    因此、您仍然可以挽救生命。

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

    George、请在我们关闭之前:

       如果我们需要在 FUNC_START (0x4800)中的 AFun 之后立即使用另一个函数 BFUN、该怎么办?

    谢谢、

    John

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

    更改此行...

    .text:AFun > 0x4800 

    类似于...

    output_section_for_functions
    {
    *(.text:AFun)
    *(.text:BFunc)
    }> 0x4800
    

    这将创建一个名为 output_section_for_functions 的输出段。  它按顺序包含所有名为.text:AFunc 的输入段以及所有名为.text:BFunc 的输入段。  但每个此类输入段中只有一个。

    谢谢、此致、

    乔治

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

    谢谢、George:

       即使是对于摩尔,你的指导也很棒。

    John