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.

[参考译文] RM48L952:是否有可能在 ARM FuSa 编译器上对某些 TI 源代码进行编译并且随后使用 TI 工具链进行调试?

Guru**** 2531950 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1370550/rm48l952-is-it-possible-to-compile-certain-ti-source-codes-on-arm-fusa-compiler-and-then-debug-with-ti-tool-chain

器件型号:RM48L952
主题中讨论的其他器件:HALCOGEN

工具与软件:

详细信息:

我正在进行功能安全固件构建、并正在 TI CCS 内部使用 HALCoGen 和 TI ARM 编译器20.2.7 LTS 生成我的所有代码。  所有代码和库在 CCS 中正确构建和链接。  我将对象加载到 TI 的 RM48硬件开发套件中、它运行得很好。  让这一切正常工作已经花了我大约3个月。  

由于我需要在60730-1下认证我的代码、我需要具有功能安全认证的编译器。  ARM FuSa 编译器获得6000美元的年度许可证认证。

所以、我现在要做的是、使用 ARM FuSa 环境编译并链接我的所有(当前正在工作的) TI 代码、然后将对象加载到 CCS 调试器中。   证明工作正常后、我将使用 ARM fuSa 工具剪切最终的功能安全合规型代码。

从理论上讲、这应该是可能的。  实际上、我很接近成功、只剩下4个链路错误。  但在做最后一点,和测试之前,我希望得到肯定的可行性。

有一组编译器/汇编器/连接器 配置需要在两个工具链中进行相同设置才能使其正常工作。  构建库时必须使用相同的 AEABI 设置。  为 TI 汇编器编写的 asm 代码使用分号字符";"表示 asm 代码、共有5个由 HALCoGen 生成的文件需要修改才能为 ARM 汇编器接受。

我当时想、也许某些 TI 大师、比如 George Mack、会在这里为您推荐成功的可能性。  我在 ARM FuSa 工具链下只剩下4个链接器错误、但在修复这些错误时、我想知道是否可能 George Mack 会在这里发表评论。 George 在这里评论了一个类似的问题:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1356086/arm-cgt-unable-to-select-eabi-version


特定于我的版本的更多详细信息:

TI CCS 配置:  

TI 编译器20.2.7 LTS 设置

-mv7R4
-代码状态=32.
--float_support=VFPv3D16.
-我
--include_path="${project_root}"
--include_path="${CG_TOOL_ROOT}/include"
--include_path="${workspace_loc:/${ProjName}/Config_01_POC_HAL/include}"
--include_path="${workspace_loc:/${ProjName}/HET_IslandDER_01}"
--include_path="${workspace_loc:/${ProjName}/XDER_CODE/INCLUDE_XDER}"
--include_path="C:/ti/Hercules/Cortex-R4 CMSIS DSP Library/1.0.0/include"
--define=XDER_COMPILER_TI_20_2_7_LTS
-定义=ccs
-- define=_AEABI_PORTABILITY_LEVEL=1
-- define=fpu_present
g
--symdebug:dwarf_version=3.
C11.
--- cpp_default
-- diag_warning=225
-- diag_wrap=off
--显示错误编号
--enum_type=packed
-- abi=eabi.
--asm_define=__TI_EABI_ASSEMBLER

TI 汇编器20.2.7 LTS 设置

-m"${ProjName}.map"
-- heap_size=0x1000
-- stack_size=0x1000
-i"${CG_TOOL_ROOT}/lib"
-i"${CG_TOOL_ROOT}/include"
- reread_libs
-- diag_wrap=off
--显示错误编号
-- warn_sections
--xml_link_info="${ProjName}_linkInfo.xml"
-- rom_model

库:TI  

C.

C++

rtsv7R4_A_le_v3D16_eabi.lib

库:开源  

C:\ti\Hercules\Cortex-R4 CMSIS DSP Library\1.0.0\Lib\ti_math_Cortex_R4_lspf.lib


以下是来自 ARM FuSa 工具链的最后4个链路错误。   

第一个是缺少一个定义、只需添加定义即可清除该定义。

其他3条与 HALCoGen 生成的启动代码和 C 环境代码有关。

不知道是什么触发了这些错误?  例如、符号"__binit__"在 TI 映射文件中以"FFFF FFFFFFF"的值结束。  这些错误似乎是由不寻常的预处理器宏定义引起的、但未定义这些定义(可能)涉及某些目标架构的默认编译器/链接器构建内的隐藏规则。

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*四(4)未校正的错误来自 ARM DS FuSa 工具链链接、来自构建日志:

. . .
清理 COMDAT 组段
将符号_arm_get_argv 重命名为_arm_get_argv$full。
将符号_arm_get_argv$stub 重命名为_arm_get_argv。
将符号__I$USE$HEAP_REGION 重命名为__heap_region$guard。
将符号__semihosting$guard 重命名为__i$use$semihosting。
将符号__RT_SIGABRT_INNER 重命名为__RT_SIGABRT_INNER $REAL。
. . .
将符号$$Temp 重命名为_RT_lib_init_clock_2。
错误:L6218E:未定义的符号 WDTCTL_sym (从 autoinit.c.obj 引用)。<<错误#1 >>
. . .
将符号__RT_lib_init_cpp_2重命名为__RT_lib_init_cpp_1。
错误:L6218E:未定义的符号_binit__(从 autoinit.c.obj 引用)。   <<错误#2 >>
. . .
将符号$$Temp 重命名为_RT_lib_init_exceptions_2。
错误:L6218E:未定义的符号__TI_pprof_out_hndl (引用自 exit.c.obj)。   <<错误#3 >>
错误:L6218E:未定义的符号_SYSMEM_SIZE (引用自 memory.c.obj)。      <<错误#4 >>
*/

感谢您的建议。  只是再次说明,需要知道可行性。  

TI 编译器似乎建议这是可行的、

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

    此外、为了完成我在这里的任务(如上所示)、您认为我应该从 以下两(2)个选项中使用哪个编译器?

    • TI ARM 20.2.7 LTS
    • TI Arm Clang C/C++编译器工具

    TI 在此处介绍了差异:

    https://software-dl.ti.com/codegen/docs/tiarmclang/rel3_2_2_LTS/

    TI Arm Clang C/C++编译器工具取代了现有的 TI Arm C/C++编译器工具。 所有新功能的开发都将在 TI Arm Clang C/C++编译器工具中完成。 armcl 编译器工具链的最后一个功能版本是 v20.2.x.LTS、只要有必要、它将继续受到积极支持。 但是、armcl 的 v20.2.x.LTS 维护版本将仅提供漏洞修复。

    这两个工具链均可用于编译和链接 C/C++和汇编源文件以构建静态可执行应用程序。 然后可以在 Arm Cortex-M 和 Cortex-R 系列器件上加载并运行这些应用程序。 根据您使用的器件系列、建议使用特定的编译器工具链。 有关使用哪个工具链的信息、请参阅器件系列的 SDK。

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

    尊敬的 Kip:

    我开始处理您的问题、并将尽快提供我的更新。

    ——
    谢谢、此致、
    Jagadish。

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

    谢谢!  我可以使用你的帮助。  以下是最新的一组 Arm FuSa 链接器错误。  看起来所有这些符号都是运行时 C/C++环境设置的一部分。  他们中的大多数似乎都在进入点之前 main () 、但文件中也有一个 exit.c .  出于某种原因、它们在 ARM 链接器步骤之前未被定义(或包含)。

    错误:L6218E:未定义的符号__cpp_initialize__aeabi_(引用自 anon$$obj.o)。
    错误:L6218E:未定义的符号_hardfp_floor (从 sci.o 引用)。
    错误:L6218E:未定义的符号__aeabi_exclund_cpp_pr1 (从 sys_main.o 引用)。
    错误:L6218E:未定义的符号__main (引用自 anon$$obj.o)。
    错误:L6218E:未定义的符号 WDTCTL_sym (从 autoinit.c.obj 引用)。
    错误:L6218E:未定义的符号_binit__(从 autoinit.c.obj 引用)。
    错误:L6218E:未定义的符号__TI_pprof_out_hndl (从 exit.c.obj 引用)。
    错误:L6218E:未定义的符号_SYSMEM_SIZE (从 memory.c.obj 引用)。

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

    因为你做了这个...

    Unknown 说:

    ...您应该考虑使用 TI 安全编译器资质审核套件。 我建议您下载并开始使用它。  我怀疑您能在很短的时间内理解它是否适合您的系统。

    我认为...

    我现在要做的是、使用 ARM FuSa 环境编译并链接我的所有(当前正在使用的) TI 代码、然后将对象加载到 CCS 调试器中

    ...意思是你从 Arm FuSa 编译器开始。  这里列出了一些 需要考虑的要点。

    我对 HALCoGen 的了解有限。  假设它有相关的文档记录并经过测试、仅能与少数编译器配合使用。  如果您使用不同的编译器、则 TI 可能不能为您提供支持。  支持 HALCoGen 的团队中应该有人对此进行评论。

    如果出现其他问题、您应寻求支持 Arm FuSa 编译器的团队的支持、而不是 TI 的支持。

    我怀疑有人已经测试过 Arm FuSa 编译器和 CCS 的组合。  我怀疑它大部分工作正常,但一些小的事情不会顺利进行。  

    谢谢。此致、

    -George.

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

    感谢 George 的评论!  您的意见对我们大有帮助。

    为了适当扩大商机的范围、我想提一下、我的公司授权我揭示:2025年、我们计划购买35,000个功能安全微控制器以符合60730-1标准、并且 Hercules RM48类别目前是领先的竞争对手。  我们也在考虑使用 Microchip 的芯片。  这对每个人来说都是一个巨大的机遇。

    >团队中支持 HALCoGen 的人应该对此发表评论。

    我正在等待 TI 对此做出具体的回答。  使用 HALCoGen 对我们而言是一项巨大优势、因为它可以显著缩短上市时间。

    此外、我向 TI 编译器团队提出的一个核心问题是 TI 编译器 ARM 20.2.7 LTS 中生成 AEABI 兼容对象的可信度问题。  如果设置了以下标志、则 TI 编译器手册会指出对象与 EABI 兼容:

    -- define=_AEABI_PORTABILITY_LEVEL=1
    -- abi=eabi.
    --asm_define=__TI_EABI_ASSEMBLER

    然而、随着 EABI 规范的发展、ARM EABI 存在不同版本。  TI 源代码中的某些位置提到了这一事实。  因此、如果 TI 团队的有人能告诉我 LTS 是否符合 EABI、会更有帮助

    • 几乎完美运行(在大多数情况下、源代码没有更改或更改很少)
    • 可以正常工作                    (需要对源代码进行更多更改)
    • 不是很好运行(源代码可能以非常重要的方式不兼容、并且可能需要进行大量清理才能清晰编译)

    此外、我还有另一个问题、通过查看 TI 源代码、此代码似乎很简单可以回答:以下用于创建运行时 C/C++库的源代码结构在使用宏的地方以相同的方式使用。  这表明 TI 的 EABI 解决方案是静态的(已完成)、可能完全正常运行、但我想知道这一点。  有人能评论吗?

    #if defined (_AEABI_PORTABILITY_LEVEL)&&_AEABI_PORTABILITY_LEVEL!= 0

    George、我也会根据您的建议和审核 TI 的编译器合规性软件包。  

    在一天结束时,我的问题是,证明 LTS 编译器符合60730-1与使用 TI 源代码 HAL 在 ARM 编译器环境中工作的构建的总努力程度(LOE )。  我只需要花几天时间移植代码以便在 ARM 环境中工作、并且只剩下7个链接时错误。   如果我可以修复这些问题、LOE 将***短于***必须证明 TI LTS 符合性。

    有一点可以帮助我、那就是 TI 是否可以评论 TI 编译器是否实际需要60730-1认证。

    Micropchip 声明(未经验证) B 类软件不需要"功能安全"编译器。 对于其20.2.7 LTS 编译器、TI 是否同意这一点?

    感谢您提供的任何信息。

    Kip

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

    我正在等待 TI 的人员回答以下问题:

    1. HAL 生成的代码可以使用其他编译器构建吗?
      1. TI 的 George Mock 让 TI HALCoGen 团队的员工进行回答、但无人回答。
      2. 我们需要回答这个问题。
    2. TI 是否认为编译器20.2.7.LTS 可以通过60730-1认证、而不需要基于60508构建的证书所需的所有深入认证? (如26262)?  也就是说、TI 是否基本上坚持这个版本的编译器、是不是基本上适用于 C/C++、没有异常处理系统、RTTI 以及其他奇特的功能?我想知道。  我只想向 TI 内部人员征求一般性意见。  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kip:

    可以使用其他编译器构建 HAL 生成的代码

    HALCoGen 生成的代码将不支持所有其他编译器。 它主要支持 LTS 编译器。

    即使对于 TI-Clang、也不能完全支持。  TI ARM Clang 不完全支持 HalCoGen 生成的代码中使用的某些宏、内联函数和 Pragma。

    (+) RM46L852:clang 编译器+ halcogen -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    我正在查看您向内部团队提出的第二个问题。

    ——
    谢谢、此致、
    Jagadish。

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

    感谢您的检查。  如前所述、对于 TI 而言、这是一个每年35,000个 Hercules RM48x 的商机。

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

    此外、UL-60730-1要求指向如下所示的61508-7规格。  关键之处在于:

    是否可通过某种方式证明适用于 C/C++的 TI 编译器的20.2.x LTS 系列已发展很长时间、通常是一款非常成熟、无漏洞的"转换器"、如下文所述

    (摘自 UL-60730-1)

    H.11.12.3.4.1工具、编程语言
    用于软件设计、验证和维护的设备(如设计工具、编程语言、翻译和测试工具)应具有适当的资质、并应显示为适合多种应用的用途。 ²increased use² IEC 61508-7:2010的 C.4.4中规定、如果符合 T Ü V S Ü D 的置信水平、则认为它们是合适的

    (摘自 IEC-61508-7)

    C.4.4工具和翻译:提高使用信心
    注意 IEC 61508-3的表 A.3中引用了该技术/措施。

    目的:避免由于软件包开发、验证和维护过程中可能出现的翻译失败而造成的任何困难。

    说明:使用翻译,没有证据表明在许多以前的项目不适当的性能。 除非有其他正确性能保证(例如参见 C.4.4.1)、否则应避免没有操作经验或存在任何严重已知故障的译员。

    如果译员有一些小缺陷、在安全相关项目中会记下相关的语言构造并小心避免。

    这种工作方式的另一种版本是将语言的使用限制为仅使用其常用功能。

    这项建议是根据许多项目的经验提出的。 已经证明,不成熟的翻译是一个严重的障碍,任何软件开发。 它们使得安全相关的软件开发普遍不可行。

    此外、目前还不存在任何方法来证明所有工具或转换器器件的正确性。

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

    尊敬的 Kip:

    很抱歉我们推迟、我将 该线程重新分配给 QJ、因为它看起来是非常优先的问题。 QJ 从这么长时间以来一直致力于这些 Hercules 器件、他比我拥有的经验最多。

    希望他会尽快为您提供建议。

    ——
    谢谢、此致、
    Jagadish。