主题中讨论的其他器件: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 在这里评论了一个类似的问题:
特定于我的版本的更多详细信息:
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 编译器似乎建议这是可行的、