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.

[参考译文] MSP430F5310:在哪里获取有关库、rts430x_LC_SD_eabi.lib 等的信息? 从 CCS5.5迁移到12.6、RTS 库中的段.boot 在哪里?

Guru**** 2448780 points
Other Parts Discussed in Thread: MSP430F5310

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1500768/msp430f5310-where-to-get-info-about-libraries-rts430x_lc_sd_eabi-lib-etc-moving-from-ccs5-5-to-12-6-where-is-section-boot-in-rts-library

器件型号:MSP430F5310
主题中讨论的其他器件:MSP430WARE

工具/软件:

我有一个在 CCS5.5中完成的旧工程。 它使用的是编译器 v4.2。 我不再使用该编译器。 它还使用了 MSP430Ware v1.80.01.03。 TI 不在网站上提供2.x 之前的 MSP430Ware。

因此,我决定从头开始创建一个新项目,并将我的源代码放入其中。 我使用模板"empty Project with main.c"创建一个新工程。 我现在正在使用编译器 v21.6.1LTS、MSP430Ware v3.80.13.03和 RTS rts430x_LC_SD_eabi.lib。

没关系。 我必须更新为 UCS_xxx 设置的一些新函数调用名称。 MSP430Ware 中的名称已更改。

这个问题导致我收到链接器警告:

"../lnk_msp430f5310.cmd"、第162行:警告#10068-D:无匹配部分
       -L rts*.lib (.text)

我在旧的链接器命令文件中有此文件:

   .boot > 0x8000
   {
       -L rts*.lib (.text)
   }

RTS 中的某些段名称很可能已更改。 在哪里可以获得库中段名的细分? 我已经查看了编译器和汇编工具文档。

有人能否为我提供针对新库(rts430x_LC_SD_eabi.lib)的等效命令行语句?

我卡住了。

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

    随附了编译器 v4.2.2和编译器 v21.6.1LTS 的 boot.c 文件。

    e2e.ti.com/.../boot-_2800_from-21.6.1LTS_2900_.c

    e2e.ti.com/.../boot-_2800_from-4.2.2_2900_.c

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

    您好、
    我似乎无法阅读这个.lib 文件。 我将在星期一咨询我的团队。

    此致、

    Diego Abad

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

    谢谢 Diego。 在平均时间中、这里提供了更多信息。

    查看映射文件、我找到了以下内容:

     7 25:入口点符号:"_c_int00 _noargs" 地址:0000b802
        +:
    ----- :
          -:                 0000b7e6   0000001c    SCI.obj (.text:USCI_A1_SharedVector)
     180 95:                 0000b802   0000001c    rts430x_LC_SD_eabi.lib:boot.c.obj (.text:_isr:_c_int00 _noargs)
          +:                 0000b81e   00000018                           : mult16_f5hw.asm.obj (.text )
    ----- :
           -:0000b426 __mspabi_srll_9                        
     1059 14:0000b802 _c_int00 _noargs                        
           +:0000c1b4 _ramvector                             
    ----- :
           -:0000b7e6 USCI_A1_SharedVector                   
     1739 14:0000b802 _c_int00 _noargs                        
           +:0000b81e __mspabi_mpyi_f5hw                     
    找到的总数:4.

    因此、我将链接器命令文件更改为:

       .boot > 0x8000
       {
           -L rts*.lib (.text:_isr:_c_int00 _noargs)
           /*-l rts*.lib (.text)*/
       }

    新段名仍然出现相同错误:

    "../lnk_msp430f5310.cmd"、第162行:警告#10068-D:无匹配部分
           -L rts*.lib (.text:_isr:_c_int00 _noargs)

    ----------------------------------------------------------------------------------------------------

    因此、我仍然有错误/问题、现在还有一个问题。

    1)编译器21.6.1LTS 中的 boot.c 具有_c_int_00模板。 它可以有以下形式:

    CSTART_DECL_c_int00 (void)
    CSTART_DECL_c_int00 _noargs (void)
    CSTART_DECL_c_int00 noinit (void)
    CSTART_DECL_c_int00 _noinit_noargs (void)
    CSTART_CEL _c_int00 _MPU (void)
    CSTART_DECL_c_int00 _noargs_mpu (void)
    CSTART_DECL_c_int00 _noinit_mpu (void)
    CSTART_DECL_c_int00 _noinit_noargs_mpu (void)

    如何选择这些表单之一?

    我没有做具体的选择、但可以从.map 文件(上文)中看到、它使用了_c_int00 _noargs

    编译器是否选择此选项?

    用户可以强制进行选择吗?

    我不想更改它、但我想在这里了解编译器是如何工作的、以便更好地理解。

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

    通常、引导加载程序不是运行事物的标准方式。 我刚刚在 GCC 附带的所有链接器脚本中搜索了字符串"boot"、但没有任何内容。

    最终用户必须编辑链接器脚本才能创建该段。 这确实需要对链接器脚本有一定程度的了解。

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

    我今天早上尝试了这些组合。 这些格式也不起作用。

    -L rts*.lib (.text:_c_int00 _noargs)

    -L rts*.lib (._c_int00 _noargs)

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

    通常、MSP430 C 工程不需要自定义链接器命令文件。 创建新的空工程时、您是否将 旧的链接器命令文件添加到下面的新工程中? 如果是,你能尝试不这样做吗? 警告是链接器未找到链接器命令文件明确要求的名为 boot.obj 的目标文件。 如果您必须执行此操作以将 RTS 代码显式链接到0x8000、则尝试在链接器命令文件中将 boot.obj 替换为 boot.c.obj。 通过检查另一个近期工程的映射文件、我可以看到新的 codegen 工具将该目标文件显示为"rts430x_LC_SD_eabi.lib:boot.c.obj ()"。

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

    问题是我们有自己的引导加载程序。 该引导加载程序需要到达一个特定位置才能跳转到运行应用程序。 因此、我们的引导加载程序设置为跳转到地址0x8000、这就是我们所有产品如何与"bootloader jump to app"配合使用的。 因此、我需要将应用程序的 c_int00放入0x8000。

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

    是的、我添加了旧的链接器命令文件。

    我按照您的建议替换为 boot.c.obj。

    -L rts*.lib (.text)

    成功了!

    对此有一些不太熟悉的地方。 也许我几年前遇到了这个问题,忘记了。?!

    但这很困惑、因为该错误没有匹配部分。 使用"section:关键字创建的段名通常位于括号中。 obj 来自编译单元。  

    不管怎么说,没有减少。 它是有效的。 非常感谢。