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.

[FAQ] [参考译文] [常见问题解答] C2000-EABI:SAFETI-DIAGNOSTICS-LIB 中的 F2837x/F2807x 软件诊断库

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1411020/faq-c2000-safeti-diagnostics-lib-f2837x-f2807x-software-diagnostic-library-in-eabi

器件型号:C2000 SAFETI-DIAGNOSTICS-LIB
Thread 中讨论的其他器件: C2000WARE

工具与软件:

当现有的.lib 文件是 SAFETI-DIAGNOSTICS-LIB ABI 时、如何在 EABI 工程中使用 C2000-COFF?

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

    目前没有、如果您希望 在 EABI 工程中使用 C2000-EABI、则目前您需要采取一些步骤自行将库迁移到 SAFETI-DIAGNOSTICS-LIB、因为目前没有正式发布的 EABI 版本

    首先、请注意 C2000-F2807x 仅适用于 SAFETI-DIAGNOSTICS-LIB 和 F2837x 器件。 C2000Ware 中的库/诊断/下已提供了对 F2800x、F2838x 和 F28Px 器件的支持、供 EABI 使用。

    它还将有助于熟悉 COFF 到 EABI 迁移的一般性知识。 有关详细信息、请参阅 C2000从 COFF 迁移到 EABI 页面。 这些步骤还假设您熟悉 C2000Ware 和 SDL 的结构。

    步骤1. 在 SDL 目录的根目录中、有一个 CCS 文件夹(例如\libraries\diagnostic\f2837xd\ccs)、其中包含静态库工程的.projectspec、可用于重建 SDL .lib 文件。 首先将该工程导入到 CCS 中、并更新工程属性以将输出格式设置为 EABI。

    请注意、工程有4个不同的编译配置、所有这些配置都需要更新为 EABI。 或者、如果您希望保留编译 COFF 库的功能、也可以为 EABI 添加新的构建配置、但您会希望更新归档器设置以为输出文件指定唯一的名称(例如 F2837xD_Diagnostic_STL_CPU1_DEBUG) _EABI .lib)

    步骤2. SDL 依赖于 Driverlib 和 SFO (HRPWM 校准)库。 您同样需要这些库的 EABI 版本。 要做到这一点、最简单的方法是从已迁移对象的较新版本 C2000Ware 中获取这些对象。 高于 C2000Ware 3.00.00的版本应支持该功能。

    步骤3. 移植库需要进行的大部分更改都与汇编代码相关。 上述迁移指南在"汇编代码更改"部分介绍了这些更新。 在库源文件夹中的.asm 文件中、您需要从函数标签中删除 COFF 下划线。 您可以将其彻底删除(例如、查找 _STL_CRC_COMPUTE 并替换为" STL_CRC_COMPUTE )或使用编译器的条件名称映射 __ TI_EABI___ 预定义符号。 这是一个看起来的示例 STL_CRC_s.asm

        .if __TI_EABI__
            .asg    STL_CRC_calculate, _STL_CRC_calculate
            .asg    STL_CRC_calculateLowBytes, _STL_CRC_calculateLowBytes
            .asg    STL_CRC_init, _STL_CRC_init
            .asg    STL_CRC_reset, _STL_CRC_reset
        .endif
    
            .global _STL_CRC_calculate
            .global _STL_CRC_calculateLowBytes
            .global _STL_CRC_init
            .global _STL_CRC_reset


    对其他.asm 文件(stl_hwbist_s.asm、stl_March_s.asm 等)中的函数重复执行此操作。
           
    步骤4. 除了上述汇编文件更改外、还需要对进行一些其他更改 STL_HWBIST 值。 其中一个是迁移指南在"条件链接:删除或保留"部分中所提到的内容。 由于 STL_HWBIST_restoreContext 函数放置在地址0x00000000处、并在 HWBIST 复位之后调用、而不是由应用程序代码调用、链接器可能会尝试将其删除、认为它未使用。 为防止出现这种情况 保留 可以在中的函数上使用 pragma stl_hwbist.c 如下所示:

    #ifdef __TI_EABI__
    #pragma RETAIN(STL_HWBIST_restoreContext);
    #endif
    #pragma CODE_SECTION(STL_HWBIST_restoreContext, "hwbist");
    void STL_HWBIST_restoreContext(void)
    {
        ...
    }


    您还将需要更改 include 文件 stl_hwbist.h 以解决中执行的下划线删除问题 STEP 3 . 请参阅下面更新的#defines:

    #ifdef __TI_EABI__
    #define STL_HWBIST_REF_HANDLE_RESET_FXN  __asm(" .ref STL_HWBIST_handleReset")
    #define STL_HWBIST_LCR_HANDLE_RESET_FXN  __asm(" LCR STL_HWBIST_handleReset")
    #else
    #define STL_HWBIST_REF_HANDLE_RESET_FXN  __asm(" .ref _STL_HWBIST_handleReset")
    #define STL_HWBIST_LCR_HANDLE_RESET_FXN  __asm(" LCR _STL_HWBIST_handleReset")
    #endif


    步骤5. 现在、您应该能够使用库工程(在中导入) STEP 1 )以构建.lib 文件。 确保重新构建所有构建配置。

    步骤6. 您现在可以在 EABI 工程中测试新的.lib 文件。 如果您使用 STA 来测试这些库、请确保还更新了 STA 项目属性并更新链接的库(SDL、SFO、Driverlib 等) EABI 版本。 您还需要对链接器命令文件进行类似的更新以删除下划线(例如 HwbistLoadStart _HwbistLoadStart -> HwbistLoadStart )并按照 EABI 迁移指南中的说明更改节名(例如 econst -> .const )。

    STL_SP 请注意、与堆栈相关的符号的命名方式有一些变化。 以下是有关如何在 STA 项目中纠正该错误的示例 STA_tests.c 文件:

    #ifndef __TI_EABI__
                STA_User_spObj.startAddress = (uint32_t)_symval(&_stack);
                STA_User_spObj.endAddress = (uint32_t)_symval(&_STACK_END);
    #else
                STA_User_spObj.startAddress = (uint32_t)_symval(&__stack);
                STA_User_spObj.endAddress = (uint32_t)_symval(&__TI_STACK_END);
    #endif