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.

[参考译文] RTOS/MSP430F5438A:如何配置 TI-RTOS 以生成 MSP-EXP430F5438-A2_pr430XS 及_pic (位置无关代码)运行时间

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/718267/rtos-msp430f5438a-how-to-configure-the-ti-rtos-to-generate-msp-exp430f5438-a2_pr430xs-with-__pic-position-independent-code-runtime

器件型号:MSP430F5438A

工具/软件:TI-RTOS

您好!

我正在尝试在 IAR (7.11.1)中启用 PIC 的情况下构建项目。  

在链接阶段、会出现一条错误消息:

错误[e117]:运行时模型不兼容。 模块 MSP-EXP430F5438-A2_pr430XS 指定"_pic"必须为"no"、但模块 ADC 具有"ropi"值。

我想知道如何将--ropi 选项添加到生成的模块 MSP-EXP430F5438-A2_pr430XS?

xdctool 版本:xdctools_3_32_00_06。

tirtos 版本:tirtos_msp43x_2_20_00_06

提前感谢。

艾伦

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

    您好、Allen、

    您可能会发现在 《适用于德州仪器 MSP430微控制器的 IAR C/C++编译器参考指南》中搜索"_pic"会有所帮助。 对于运行时模型属性"__pic",您可以为该值指定"ropi"或"no"。

    此外、我找到了另一个相关线程、其中 Debug 与 Release 配置会影响此行为。 据 Anders 说、启用"ropi"使代码更难读取。

    在 IAR MSP430中创建的十六进制版本不起作用?

    此致、

    James

    MSP 客户应用

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

    感谢您提供本文档。

    如果我选中了除 MSP-EXP430F5438-A2_pr430XS.or430XS 文件之外的所有.c 文件的位置无关复选框(选中.R43文件)、则已选中-ropi 启用。

    我正在调试目标中工作。

    我的问题是为什么这个 MSP-EXP430F5438-A2_pr430XS.or430XS 文件不是独立于位置的? 以及如何启用它?

    我们是否应该使用 make 文件中的一些特殊参数重建库? 还是应该在.cfg 文件中向 TI-RTOS 添加一些设置?

    我在互联网上进行了大量搜索、但却未能找到任何有用的信息。

    还是一个更常见的问题、TI-RTOS 是否支持 PIC?

    提前感谢。


    艾伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此帖子具有类似的问题。
    e2e.ti.com/.../220811
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Allen、

    我在 IAR 发行说明中发现--ropi 是一个已弃用的链接选项。

    supp.iar.com/.../icc430.ENU.html

    至于 TI-RTOS 的一般图片支持、我想这不会是问题、但我会在询问后再与您联系。

    谢谢、

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

    谢谢 Sean、

    昨天、我尝试通过修改编译配置文件(BIOS.Bld 和 drivers.Bld)来重建 TI-RTOS。

    VAR ccOpts ={

    "IAR.targets.MSP430.MSP430X_small":"-ropi",   //-ropi 已添加


    };

    但是、编译会停止、并显示以下一些错误消息。 似乎不支持编译器选项关键字"--ropi"、"__pic"或"__ropi"。

    在这两个.bld 文件中添加编译器选项是否正确? 如果是、关键字是什么??  

    非常感谢。

    艾伦

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

     另一种可能的解决方案是通过正确的编译器选项重新配置 BIOS、但我还找不到适用于 PIC 或 ROPI 的选项。

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

    我已重新创建了您的链接问题。

    我认为您需要使用该选项重建 driverlib/驱动程序。
    我认为最简单的方法是将文件(driverlib 和驱动程序文件)直接添加到您的项目中、以便链接器无需查找符号。 构建过程需要一段时间、但这是查看问题是否出在的最低努力方法。

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

    您好 Sean、

    感谢您的反馈。

    1) 1)对于您的第一个重建 driverlib/驱动程序的建议、我已成功地使用--ropi 选项重建 BIOS.o、方法是在.cfg 文件中添加此编译器选项。

    BIOS.libType = BIOS.LibType_Custom;

    BIOS.customCCOpts +="-ropi";

    但是、另一个文件 xxx_pr430Xs.or430XS (位于文件夹 xxx\configPkg\package\cfg 中)仍然未启用"ropi"。

    这个文件似乎是自动生成的、我们如何也可以将"--ropi"添加到这个文件中?

    2) 2)如何将文件(driverlib 和驱动程序文件)直接添加到项目中?

    谢谢

    艾伦

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

    艾伦

    到目前为止、我还不幸运地使用该选项重建这些库、您是否尝试将"-ropi"添加到此文件的"配置文件"部分:?

    C:\ti_tirtos_msp43x_2_20_00_06\products\BIOS_6_46_00_23\packages/IAR\targets\MSP430\MSP430X_small.XDC

    但是、如果我们将源文件/头文件直接添加到您的项目中、我们可能完全不需要这些库。

    要添加这些文件、您必须知道您的应用程序使用的驱动程序以及这些驱动程序使用的 driverlib 文件、并将它们添加到您的 IAR 项目中。 然后、这些文件将使用项目的编译标志在本地编译、因此在链接时不需要库。

    谢谢、

    肖恩

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

    您好 Sean、

    谢谢、我刚刚尝试在文件夹 C:\ti_tirtos_msp43x_2_20_00_06\products\BIOS_6_46_00_23\packages\IAR\Targets\MSP430\中的文件 MSP430X_small.XDC 中添加"-ropi"选项。

    /*!
    *==== CC ====
    *用于将 C/C++源文件编译为目标文件的命令
    *
    *默认值:
    *@p (dlist)
    *-`- e`
    *启用编译器扩展、以便可以获取段
    *以 C 表示的起始地址、通过:
    *@p (代码)
    *#pragma 段="CSTACK"
    * isrStack =__secte_begin ("CSTACACK");
    *@p
    *-`-内核=430X`
    * MSP430X 架构
    *-`- data_model`
    *用于 MSP430X 架构的小型数据模型
    *-`- save_reg20`
    *所有的20个寄存器位都保留在所有中断函数中
    *@p
    *
    覆盖 readonly config 命令 cc ={
    CMD:"icc430"、
    选项:"-e --core=430X --data_model=small --save_reg20 --ropi"
    };

    但是构建日志仍然显示如下:

    "ERROR[e117]:不兼容的运行时模型。 模块 MSP-EXP430F5438-A2_pr430XS 指定"_pic"必须为"no"、但模块 ADC 具有"ropi"值

    "

    我没有机会将库文件直接添加到项目中、您是否成功尝试了此方法?

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

    您好 Sean、

    链接中、该链接显示"没有 XDCtools、就无法使用 SYS/BIOS。 要替换 XDCtools、您需要使用另一个工具来读取 CFG 脚本、然后生成与 SYS/BIOS 库和应用程序编译和链接的源文件。 我不知道任何这样的工具。"

    https://e2e.ti.com/support/embedded/tirtos/f/355/t/189232?DSP-SYS-BIOS-without-using-the-XDC

    那么、在您看来、如果没有配置文件和 XDCTool、我们如何才能使用 BIOS 和库呢?

    谢谢

    艾伦

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

    链接中、该链接显示"没有 XDCtools、就无法使用 SYS/BIOS。 要替换 XDCtools、您需要使用另一个工具来读取 CFG 脚本、然后生成与 SYS/BIOS 库和应用程序编译和链接的源文件。 我不知道任何这样的工具。"

    e2e.ti.com/.../189232

    那么、在您看来、如果没有配置文件和 XDCTool、我们如何才能使用 BIOS 和库呢?

    谢谢

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

    您好、Allen、

    再次感谢您的耐心等待。 只是快速状态更新。 在与更熟悉 XDCtools 的工程师进行一些调试后、我们确定 IAR XDC 工具无法正确传递标志、并且缺少用于指定自定义配置%ld 文件的选项。 覆盖 XDC 目标也是不够的、除非在我们的末尾重新构建了该封装 我们正在探讨此问题的替代解决方案、希望下周初我能为您带来更好的消息。

    谢谢、

    肖恩

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

    感谢 Sean 的更新。

    希望可以找到解决此问题的替代解决方案。

    除了向 IAR_MSP430X_Small 目标添加"ropi"、我们还需要使用--ropi 选项重建库吗?  

    如果是,我们应在何处添加该选项?

      

    谢谢

    艾伦

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

    因此、我们能够在配置中将错误固定下来、并且我们需要解决以正确传递标志的问题。 变通方法是修改路径为:\ti\tirtos_msp43x_2_20_00_06\products\BIOS_6_46_00_23\packages/IAR\tools\configuro\的 Main.xs 中的 getCompileOpts 函数

    此函数删除了所有非-D/-I 选项。 您需要允许返回 ropi 标志、这可以简单地添加:
    //硬编码 ropi 标志
    Copts +="--ropi";
    退货(复印);


    遗憾的是、内核设计为不独立于位置、因此这会导致几个编译错误、如下所示:
    此对象的地址不能用于静态初始化
    __far__ const XDC_runtime_Types_Base XDC_runtime_ISystemSupport_Interface_Base_C ={(void*)&XDC_runtime_IModule_Interface_Base_C};

    我被告知、通常使用一个小型应用程序来编译内核更有意义、该应用程序会跳转到独立于位置的代码应用程序。 我们需要了解更多有关您的设计的信息、以进一步提供帮助。

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

    谢谢 Sean、

    我将在接下来的几天内尝试您的解决方案、并将让您了解其工作原理。  

    对于您最后的建议、"通常使用一个小应用程序来编译内核、该小应用程序会跳转到独立于位置的单独代码应用程序"、如果我理解正确、那么该小应用程序会启用 RTOS、而支持独立代码的其他应用程序代码将不会使用 RTOS?  

    我是否理解正确?

    谢谢

    艾伦

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

    是的、您可以创建一个包含位置无关代码的库文件、并将其链接到您单独的 TI-RTOS 项目中。

    不同的编译器具有不同的库处理方式、但我认为您需要参阅 IAR 文档。 我在这里找到了一些好的起点:

    ftp.iar.se/.../EWARM_DevelopmentGuide.ENU.pdf
    ftp.iar.se/.../EWARM_IDEGuide.ENU.pdf

    谢谢、

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

    很抱歉耽误你的回答。

    我忙于开发该项目的引导加载程序。

    您关于正常编译 TI-RTOS 并使用另一个使用独立于位置的选项编译的应用程序跳转到该应用程序的建议可能不适合我们的要求。
    原因是、我们将在 IAR 项目中同时编译带有选项(与位置无关)的应用项目(使用.cfg 文件编译和配置 TI-RTOS)、并将输出映像上传到产品中。 似乎无法将应用程序分为两个(一个是 TI-RTOS、另一个是没有)。

    不过、好消息是引导加载程序工作正常、并且通过 UART 进行 FW 更新。
    引导加载程序不会直接跳转到闪存中的新应用程序映像(首选选项是 TI-RTOS 支持与位置无关的功能)、而是将新应用程序映像复制到原始应用程序的地址。 (这就是我们希望 TI-RTOS 能够支持该功能的原因)。

    遗憾的是、TI-RTOS 不支持此功能。 那么、将来是否有任何支持该功能的计划?
    我相信其他客户也会有类似的要求。

    BTW。 您的文档链接适用于 ARM 处理器、但通常仍然有用。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Allen、

    不用担心、很高兴听到您找到了解决方案。

    因此、如果我理解正确、您希望 TIRTOS 应用程序为 PIC、以便无论您放置在何处、都可以直接跳转到新的 FW? 这是一个有趣的用例、我相信大多数引导加载程序会像现在一样在固定位置覆盖旧应用程序。 尽管在理论上、您可以将应用程序放置在其他位置、前提是您提前为该位置编译应用程序。

    遗憾的是、我认为内核不支持 PIC、因为这可能需要重写大部分内容、甚至重新构建。 我还无法找到支持 PIC (至少显式)甚至共享库的竞争 RTOS 解决方案、这正是 PIC 的常见原因。

    无论如何、感谢您再次与我们联系、很抱歉我们没有您想要的功能。 祝您好运!

    肖恩