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.

[参考译文] TMS320F280039-Q1:任何指南都可以帮助客户将 COFF 迁移到 ELF

Guru**** 2901170 points

Other Parts Discussed in Thread: C2000WARE, SYSCONFIG, TMS320F280039-Q1

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1639339/tms320f280039-q1-any-guideline-can-help-customer-migrate-coff-to-elf

器件型号: TMS320F280039-Q1
Thread 中讨论的其他器件: C2000WARESysConfig

您好的团队、

我向我的客户询问这个问题。

我的客户希望将 COFF 工程迁移到 ELF 工程。

我们遵循这个: https://software-dl.ti.com/ccs/esd/documents/C2000_c28x_migration_from_coff_to_eabi.html

但缺少一些内容:  

例如、客户需要修改#pragma DATA_SECTION (TestInfo、“FixValue “);
const u32 ulTestInfo = 0x11223344 to attribute ((retain、section(“FixValue“))) const u32 ulTestInfo = 0x11223344;

如果他们不这样做,他们不能在映射文件中找到变量 ulTestInfo。

尽管发生此更改后、变量在存储器中的存储顺序会发生变化。

 

但我们提供的文档中未包含此内容

你能帮助检查任何其他需要注意的迭代,除了文件: https://software-dl.ti.com/ccs/esd/documents/C2000_c28x_migration_from_coff_to_eabi.html

BRS

Shuqing

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

    尊敬的 Fleenor:

    1.在 EABI 工程中、对于此函数、如果客户使用 pragma 将 Timer0IntIsr 分配给.TI.ramfuc、则可以成功完成此操作

    但对于此 gwFileInfo、如果客户使用 pragma、则不能将其放置在 app_file_info 段中(可以使用 pragma 放置在 COFF 工程的 app_file_info 段中)

    客户需要使用属性来实现其要求

      在客户将 COFF 迁移到 EABI 时、是否必须将所有 pragma 更改为属性?

    2、客户使用以下库

    您能否介绍一下这些库的最新版本并向我提供这些库的发布说明? 在 C2000ware SDK 发行说明中找不到特定信息

    3.从 COFF 迁移到 EABI 时、是否需要替换驱动程序源?

    BRS

    Shuqing

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

    尊敬的 Shuqing:

    直接解决您的三个后续问题。

    1. #pragma __attribute__ 迁移到 EABI 时必须全部更改为?

    否—并非所有 pragma 都必须转换、但函数和未引用的数据之间的行为不同。

    #pragma CODE_SECTION(Timer0IntIsr, ".TI.ramfunc") 工作的原因是 Timer0IntIsr ISR、它 由中断矢量表引用、因此 ELF 链接器不会将其去除。 该 pragma 会成功放置它 .TI.ramfunc 、因为链接器将其视为“已使用“。 (请参阅验证此情况的代码和映射文件的图像。)

    然而, gwFileInfo (放置在像这样的自定义部分中的常量变量) app_file_info 没有被其他代码明确引用 — 它存在于外部工具 ,调试器,或固定地址读取。 在 ELF 中、链接器 未使用的段消除 会以静默方式将其剥离。 这就是为什么 #pragma DATA_SECTION 单独针对该变量失败、但在 COFF 模式下工作(无论如何都保留了所有内容)。 (图像显示从到的转换。) #pragma DATA_SECTION __attribute__((retain, section("app_file_info"))) gwFileInfo

    规则是:

    • 如果通过 #pragma DATA_SECTION 或放置的符号 #pragma CODE_SECTION 代码中的其他位置被引用、pragma 语法仍在 EABI 中起作用。
    • 如果 未引用该符号 (校准数据,版本信息,固定地址常量)、则 必须 添加 __attribute__((retain, section("...")))#pragma RETAIN 以防止剥离。

    实用建议: 审核 #pragma DATA_SECTION 项目中的每个项目 、并添加 __attribute__((retain, section("..."))) 未在代码中直接引用的任何变量。 对于引用的符号、pragma 语法仍然起作用、但转换为 __attribute__ 语法是 EABI 前瞻性的最佳实践。 这增加了清晰度并提高了未来可维护性。

    2.图书馆版本和发行说明

    根据提供的图像、您使用的是 C2000Ware 6.00.01.00 中的库。 图像中的文件名确认了 COFF 和 EABI 版本的可用性。

    以下是相关信息的摘要:

    • 首先在 C2000Ware 4.00.00.00 中添加了 F28003x 支持(driverlib、bitfield、SysConfig 和库)
    • 从 C2000Ware 4.00.00.00 开始添加了 F28003x 的 EABI 闪存 API 库、并 4.02.00.00 中添加了 F28003x 的功能安全质量闪存 API v1.58.10
    • IQMath、driverlib 和器件库 会随着每个 C2000Ware 版本而更新
    • EABI 和 COFF 库版本都分布在 C2000Ware 中、编译需要 “启用对 GCC 扩展的支持“ (在编译器 v6.4.0+中默认启用)。
    • 重要说明: 请确保将 库的 EABI 版本(例如,,和)链接 driverlib_eabi.lib cla2_math_library_eabi.lib its2800_fpu32_fast_supplement_eabi.lib到项目、如所提供的映像中所示。

    详细的每个库更改日志嵌入在 C2000Ware 安装目录中、而不是顶级 SDK 版本说明中。 查找范围:

    C2000Ware_x_xx_xx_xx/libraries/flash_api/f28003x/
    C2000Ware_x_xx_xx_xx/libraries/math/IQmath/
    C2000Ware_x_xx_xx_xx/driverlib/f28003x/


    3. COFF 到 EABI 的迁移是否需要驱动程序源替换?

    driverlib 源代码本身与格式无关 –它是 C 源代码、会编译成项目目标的任何输出格式。 .c .h 从 COFF 切换到 EABI 时、无需替换 driverlib 和源文件。

    需要更改的内容:

    • 预编译的库文件.lib() 必须是 EABI 版本(例如,而不是) driverlib_eabi.lib driverlib_coff.lib
    • 电机控制和 InstaSPIN 库现在支持 COFF 和 EABI 格式 — 选择正确的型号。
    • 必须更新链接器命令文件以使用 ELF 段名称 (.bss.const//.data 而不是 .ebss/.econst)。

    如果您要在工程中构建来自源代码的 driverlib、只需使用 EABI 设置重新编译就足够了。


    为了帮助进一步完善这一点、了解以下内容会有所帮助:

    • 项目是否包括可能需要 ELF 语法更新的汇编文件。
    • 无论客户是使用自定义链接器命令文件还是 C2000Ware 模板。 (评估可能的 ELF 段名称更改。)

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    1.我想 再次强调、客户不使用 C2000Ware 6.00.01.00、请再次查看图片!!!

    根据提供的图像、您正在使用 C2000Ware 6.00.01.00 中的库

    2. 我在下面的路径中找不到这些库发行说明,请再次检查!!!!

    每个库的详细更改日志嵌入在 C2000Ware 安装目录中、而不是顶层 SDK 发行说明中。 [/报价]

    3.我只是想知道我们现在发布的最新的图书馆和这些图书馆发行说明,请直接回答我!!!

    我怎么能相信你的其他问题的答案??

    BRS

    Shuqing

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

    尊敬的 Shuqing:

    1) 您分享的图片展示了如何使用 C2000Ware 6.00.01.00。  

    您能帮助我了解当时使用的是哪个版本吗?

    2) 对先前错误引用 changelog 详细信息的道歉。 相关详细信息可在以下位置找到:

    C2000Ware_26_00_00\libraries\flash_api\f28003x\docs(特定于闪存 API 库 — 请参阅 PDF 的第 40 页)

    C2000Ware_26_00_00\change_log.html(包含整个 C2000ware 的更改/更新的详细更改日志)

    3) 最新的 C2000Ware 版本将始终包含相关库的最新版本、该版本始终可从以下位置下载:  

    https://www.ti.com/tool/C2000WARE/#downloads

    可以在以下位置找到最新版本:

    https://www.ti.com/tool/download/C2000WARE/26.00.00.00.STS

    我希望这能够正确解决您的问题。

    此致、

    Zackary Fleenor

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

    尊敬的 Shuqing:

    接下来是我们之前关于 TMS320F280039-Q1 的 COFF 到 EABI 迁移的讨论。

    我希望我提供的有关以下方面的信息:

    1. #pragma Vs __attribute__((retain, section())) 使用模式
    2. C2000Ware 库位置和更改日志
    3. EABI 迁移的驱动程序源要求

    ...对客户的迁移工作有帮助。

    我想查看以下几项:

    • 您的客户是否能够使用提供的指导成功完成迁移?
    • 变量放置、存储器排序或段消除是否仍存在任何需要澄清的问题?
    • 客户是否在我引用的路径中找到了库版本信息和更改日志?

    关于 C2000Ware 版本: 我从屏幕截图中看到路径显示 C2000Ware_6.00.01.00. 如果这不正确并且使用了不同版本、请分享正确的版本号、以便提供特定于版本的指导。

    其他支持: 如果您的客户仍然遇到以下方面的特定技术问题:

    • 从映射文件中去除未引用的符号
    • COFF 和 ELF 版本之间的存储器布局差异
    • 链接器命令文件段映射
    • ELF 需要的任何汇编文件语法更新

    ...please 提供详细信息、我很乐意进一步调查。

    我希望确保您的客户拥有顺畅的迁移体验。 请告诉我当前的状态或是否有任何未完成的阻止程序。

    此致、

    Zackary Fleenor