1 AC6 之于 CLion
- 1)在上一篇文章中,我们知道 project generator 通过其 “Write Once, Compile any Tool” (跨工具)的特性,可以让我们使用 Keil5 uVision 优秀的仿真器与编译器 AC6 的同时,享受 CLion 等现代编译器的优秀代码组织能力。在这篇文章中,我们将基于 project generator,让 CLion 可以调用 Keil5 uVision 优秀的编译器 AC6(armclang)。
2)资源:
- (1)硬件:基于嘉立创的天空星 STM32F407VET6 开发板
(2)代码:
2 配置 progen
- 1)progen(project generator)的基本安装使用可以参考上一篇文章《project generator 简单使用》,这里我们来快速完成准备工作。
2)将 STM32F407VET6 的相关配置提供给 progen:
- (1)使用 STM32CubeMX 随便生成一个名为 stm32f407,但主芯片要选择 STM32F407VET6
(2)找到 stm32f407 项目的 stm32f407.uvprojx 文件所在目录,打开命令行,输入以下命令:
progendef create -m stm32f407vetx -t uvision5 -f stm32f407.uvprojx
- (3)上述命令将在当前目录生成一个 stm32f407vetx.yaml 文件。打开该文件,将其中的 “Manually add core (cortex-mX) instead of this text” 内容替换成 STM32F407VET6 的 “cortex-m4”
- (4)将 stm32f407vetx.yaml 文件复制到 <font color="red">%PYTHON\_HOME%\Lib\site-packages\project\_generator\_definitions\mcu\st\</font> 目录下
- (5)对于其它厂商的芯片,只要他们提供基于 Keil 的 SDK,都可以通过这种方式来生成 progen 的 yaml 配置文件
3)生成项目的模板配置:
(1)在上述提供的 demo-jlc_stm32f407_cic 和 demo-jlc_stm32f407_oop 两个项目的 /records/tools 目录下,有这些模板文件:
- cmakelist_armclang.tmpl 模板文件:用于生成在 CLion 中使用 AC6 编译器的项目;
- cmakelist_gccarm.tmpl 模板文件:用于生成在 CLion 中使用 arm GCC 编译器的项目。
- uvision5_armc6.uvoptx.tmpl 模板文件:用于修改默认的 Keil5 uVision 项目配置(修改自上述的 stm32f407.uvprojx 文件)。
- (2)选择自己所需的模板文件,这里为 cmakelist_armclang.tmpl,复制到 <font color="red">%PYTHON\_HOME%\Lib\site-packages\project\_generator\templates</font> 目录。(复制前记得备份,否则一旦出问题就需要重新安装 progen 了)
4)AC6 之于 cmake 配置:
(1)AC6 之于 cmake 在 progen 中的工具名为 cmake_armclang,则:
- 生成项目时,-t 选项指定的工具名 cmake_armclang
- 配置代码的编译、汇编、链接选项时,要在 tool_specific.cmake_armclang.misc.xxx_flags 下
- 以上可参考代码的 /records/tools/armclang.yaml
- (2)添加环境变量
3 可执行文件 size 显示优化
1)AC6 的编译结果只提供了代码各个域的大小(如下),不够直观,所以由于 CMake 灵活的可定制化,这里将对结果进行优化显示(源码见上述第三个仓库),可配置展示为百分比或进度条(本来还想实现扇形,然而控制台效果不理想,可能需要用到图形库,遂放弃)。
- 代码参考:OpenOCD 的参数解析与日志部分
Program Size: Code=24796 RO-data=7524 RW-data=4 ZI-data=12404
2)使用说明:
calcelf.exe -h calcelf(Calculate Executable file) Licensed under GNU GPL v2 --help | -h display this help --version | -v display program version --debug | -d set debug level. available options:(-d3) --format | -f set format to print. available options:(percent, progbar) --map | -m set Keil5 uVision .map file <name> --scatter | -s set Keil5 uVision .sct file <name>
3)配置:以在 CMake 中使用为例
- 首先需要将 /KEIL_HOME/ARM/ARMCLANG/bin 目录添加到环境变量
- 然后将 calcelf.exe 复制到上述目录,确保其可以在命令行访问到
- 配置完成后,通过在命令行输入 “calcelf.exe -h” 来测试
- 当然,如果不进行环境变量配置,也可以使用绝对路径
CMake 中的配置已经集成到 /records/tools/cmakelist_armclang.tmpl 文件末尾:
# 8 Calculate Executable file add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${ARMCC_CALCELF} --format=progbar --map="${PROJECT_NAME}.elf.map" --scatter="{{linker_file}}" )
4)calcelf.exe 结果展示:
// 默认输出为百分比 calcelf.exe -m jlcsky031_blink.elf.map -s stm32f407.sct Memory Region Used Size Region Size %age Used RAM: 1640 B 128 KB 1.25% FLASH: 2976 B 512 KB 0.57% // 也可以输出进度条 calcelf.exe -d0 -m jlcsky031_blink.elf.map -s stm32f407.sct -f progbar Total RW Size ( RW Data + ZI Data) 1640 ( 1.60 KB) Total ROM Size (Code + RW Data + RO Data) 2976 ( 2.91 KB) [==--------------------------------------------------------------------------------------------------] 1.25% RAM USED [=---------------------------------------------------------------------------------------------------] 0.57% ROM USED
4 测试
1)生成项目:
progen generate -t cmake -v -p jlcsky031_blink # 生成 CMake 项目 progen generate -t cmake_armclang -v -p jlcsky031_blink # 生成 uVision5 项目 progen generate -t uvision5_armc6 -v -p jlcsky031_blink # 生成 CMake AC6 项目
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。