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.
我的问题是 TMS570LC4357 MCU 是否与使用 TI Arm Clang 编译器兼容,我们希望使用该编译器与 GCC 工具兼容。
我成功地创建了一个 Hello World 计划,该计划基于以下论坛帖子 进行编译和链接:https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/998144/ti-arm-clang-compiler-tools-user-s-guide-v1-3-description-of-run-time-library-selection-seems-incorrect
但是,程序在目标上执行不正确。 程序似乎从不进入主程序,而是在_c_int00期间中止
有人能提供一个简单的 hello 世界示例程序,使用 TI Arm Clang Compiler 为 TMS570LC4357 MCU 进行编译,链接和执行,或者告诉我 Clang 编译器是否还不受此主板支持?
请提前感谢
e2e.ti.com/.../TMS570LC4357_5F00_TI_5F00_CLANG_5F00_hello.zip
从 ART-CGT:从 ART-CGT 到 ART-CGT-clang-X。 HALCOGen 不支持 TI Arm Clang 编译器。
https://github.com/Chester-Gillon/E2E_example_projects/tree/master/TMS570LC4357_TI_compilers_halcogen 是一个我确实让 TI Arm Clang 编译器与 HALCoGen 配合使用的项目示例。 CCS 项目中的 Debug_TI_clang 生成配置使用 TI Arm Clang 编译器。
[引用 userid="501156" url="~ë/support/icls/arm-based 微处理器组/基于 ARM 的微控制器/f/arm-based 微控制器-forume/1070681/tms570lc4357-use-di-arm-clang-compiler)]但是,程序在目标上执行不正确。 程序似乎从不进入主菜单,而是在_c_int00期间中止从内存中看,程序在创建时确实起作用,但我目前没有硬件来测试它。
您使用的 CCS 是哪个版本?
可能相关的原因是 ,对于 CCS 11.0和 CCS 11.1中固定的大型 endian 设备,程序未正确加载到正确的加载地址
主席先生,你好,谢谢你的快速答复。 我使用的是 CCS 11.0版,但我可以确认该二进制文件已正确加载到目标上,因为初始 PC 指向_c_int00地址。
但是,HALCOGen 没有得到官方支持这一事实让我认为,在为 Hercules 提供官方支持之前,我们不想走 TI Arm Clang 的路线。 预计哈洛科代官方对提尔克朗的支持将在什么时候出现?
我不是 TI 员工,因此无法对此发表评论。
切斯特,您好,谢谢您的帮助。 我将继续努力,将此问题标记为已解决,因为您已回答了我的基本问题,即对 Hercules MCU 上的 TI Clang 编译器的官方支持程度。
感谢您的支持。
我已经回去调查了。 TMS570LC4357_TI_clang_hello 示例最初是使用 CCS 10.3和 TI Clang v.1.3.0-beta-1开发的。
我已经参加了同一个项目,更改为 TI Clang v1.3.LTS 编译器,并在不同的 CCS 版本下进行了测试:
对于 CCS 10.3,该示例可以正确运行。
对于 CCS 10.4,11.0或11.1,此示例无法正确运行。 在尝试执行第一个指令时获得 UNDEF 异常。
该问题似乎是由可执行文件中的不正确无误引起的。
使用 CCS 10.3构建并工作时,入口点的以下“分解”视图:
_c_int00(): 0003f89c: EE110F50 mrc p15, #0, r0, c1, c0, #2 0003f8a0: E3A0360F mov r3, #0xf00000 0003f8a4: E1800003 orr r0, r0, r3 0003f8a8: EE010F50 mcr p15, #0, r0, c1, c0, #2 0003f8ac: E3A00101 mov r0, #0x40000000 0003f8b0: EEE80A10 vmsr fpexc, r0 0003f8b4: E10F0000 mrs r0, apsr 0003f8b8: E3C0001F bic r0, r0, #0x1f 0003f8bc: E3800010 orr r0, r0, #0x10 0003f8c0: E129F000 msr cpsr_fc, r0 0003f8c4: E59FD020 ldr r13, [pc, #0x20] 0003f8c8: EBFF65DF bl __mpu_init 0003f8cc: EBFF4BFD bl _system_pre_init 0003f8d0: E3500000 cmp r0, #0 0003f8d4: 0A000000 beq #0x3f8dc 0003f8d8: EBFFFE9B bl __TI_auto_init_nobinit_nopinit 0003f8dc: EB0004E3 bl _args_main 0003f8e0: E3A00001 mov r0, #1 0003f8e4: EBFFFFD7 bl exit 0003f8e8: EAFFFFFE b #0x3f8e8 0003f8ec: 08073500 stmdaeq r7, {r8, r10, r12, r13}
以下是使用 CCS 11.1构建的入口点的“分解”视图,在第一个指令中会出现 UNDEF 异常:
_c_int00(): 0003f89c: 500F11EE andpl r1, pc, r14, ror #3 0003f8a0: 0F36A0E3 svceq #0x36a0e3 0003f8a4: 030080E1 movweq r8, #0xe1 0003f8a8: 500F01EE andpl r0, pc, r14, ror #3 0003f8ac: 0101A0E3 smlatteq r1, r3, r0, r10 0003f8b0: 100AE8EE andne r14, r10, r14, ror #17 0003f8b4: 00000FE1 andeq r0, r0, r1, ror #31 0003f8b8: 1F00C0E3 svcne #0xc0e3
请注意,32位指令十六进制值是在工作程序和非工作程序之间的 endian 交换。
使用 CCS 10.3构建的项目运行正常,CCS 生成的 makefile 将 -be32选项传递给链接器。 而当使用 CCS 10.4,11.0或11构建同一个项目时 ,--be32选项不会传递给链接程序。
在使用相同的.project,.cproject 和.ccsproject 文件时,CCS 版本如何解释设备的不可用性存在一些奇怪的地方。
在 CCS 10.3中,设备无内核报告为 BE32:
由于 CCS 11.1中的项目相同,因此“设备无功能”被报告为“大:
这似乎是一个 CCS 问题,可能是设备文件的问题。 将尝试调查。
它似乎不在设备文件中,而是在其他文件中。 在 CCS 11.1中,使用 TI Clang 编译器的 TMS570LC4357项目不再支持正确的 be32设备 endiess,这一项目已在 CCS 论坛上提出。