如何用Clang交叉编译ARM Cortex-M4 STM32F407VGT6?配置疑问
STM32F407VGT6交叉编译LLVM工具链问题解答
1. 处理器架构归属
STM32F407VGT6搭载Cortex-M4内核,该内核属于ARMv7E-M架构,且内置FPv4-SP单精度FPU,和你查阅的资料完全匹配,因此工具链中armv7em_*前缀的配置文件是对应该处理器的正确选择。
2. 两个配置文件的区别
对比armv7em_hard_fpv4_sp_d16.cfg和armv7em_hard_fpv4_sp_d16_semihost.cfg的内容,核心差异在于半主机模式的支持:
- 启动文件不同:
- 普通配置使用通用裸机启动文件:
crt0.o - 半主机配置使用适配半主机模式的启动文件:
crt0-semihost.o
- 普通配置使用通用裸机启动文件:
- 链接库不同:
半主机配置额外添加了-lsemihost选项,用于链接半主机功能库。半主机模式是一种调试技术,允许嵌入式目标设备借助调试主机的IO资源实现输入输出(比如将程序中的printf输出到主机终端),适合开发调试阶段使用;而普通配置面向纯裸机运行环境,无半主机相关依赖。
附配置文件内容
armv7em_hard_fpv4_sp_d16.cfg
--target=arm-none-eabihf -mfloat-abi=hard -march=armv7em -mfpu=fpv4-sp-d16 -fno-exceptions -fno-rtti --sysroot <CFGDIR>/../lib/clang-runtimes/arm-none-eabi/armv7em_hard_fpv4_sp_d16 <CFGDIR>/../lib/clang-runtimes/arm-none-eabi/armv7em_hard_fpv4_sp_d16/lib/crt0.o
armv7em_hard_fpv4_sp_d16_semihost.cfg
--target=arm-none-eabihf -mfloat-abi=hard -march=armv7em -mfpu=fpv4-sp-d16 -fno-exceptions -fno-rtti --sysroot <CFGDIR>/../lib/clang-runtimes/arm-none-eabi/armv7em_hard_fpv4_sp_d16 <CFGDIR>/../lib/clang-runtimes/arm-none-eabi/armv7em_hard_fpv4_sp_d16/lib/crt0-semihost.o -lsemihost
内容的提问来源于stack exchange,提问作者Alessandro Bertulli
相关产品推荐
相关产品推荐

