当前位置: 首页 > news >正文

project generator 简单使用(二)之 CLion 与 AC6

文章目录

    • 1 AC6 之于 CLion
    • 2 配置 progen
    • 3 可执行文件 size 显示优化
    • 4 测试

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)代码:
      • https://gitee.com/luyaocf/demo-jlc_stm32f407_cic.git
      • https://gitee.com/luyaocf/demo-jlc_stm32f407_oop.git
      • https://gitee.com/luyaocf/calcelf.git

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 文件复制到 %PYTHON_HOME%\Lib\site-packages\project_generator_definitions\mcu\st\ 目录下

    • (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,复制到 %PYTHON_HOME%\Lib\site-packages\project_generator\templates 目录。(复制前记得备份,否则一旦出问题就需要重新安装 progen 了)

  • 4)AC6 之于 cmake 配置:

    • (1)AC6 之于 cmake 在 progen 中的工具名为 cmake_armclang,则:
        1. 生成项目时,-t 选项指定的工具名 cmake_armclang
        1. 配置代码的编译、汇编、链接选项时,要在 tool_specific.cmake_armclang.misc.xxx_flags 下
        1. 以上可参考代码的 /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 -hcalcelf(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_BUILDCOMMAND ${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 UsedRAM:         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 progbarTotal 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://www.mrgr.cn/news/35116.html

相关文章:

  • 5.7 与 8.0 对相同文件的 LOAD DATA 语句结果不同
  • 微服务各组件整合
  • WebGIS四大地图框架:Leaflet、OpenLayers、Mapbox、Cesium
  • MDBook 使用指南
  • 【月之暗面kimi-注册/登录安全分析报告】
  • 计算机网络(10)网络性能
  • top 使用技巧
  • 基于vue框架的刺梨销售管理系统pgl49(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 大势智慧亮相“第十届博博会”,展现数字文旅新质生产力!
  • React 中实现 vue keep-alive 功能的方法
  • web群集--rocky9.2部署zabbix服务端的详细过程
  • 如何使用ECharts制作折线图
  • 用于体积医学图像分割的跨视角差异依赖网络|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割
  • 软件验收测试报告有什么作用?第三方验收测试报告包括哪些内容?
  • EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析
  • 【源码】Sharding-JDBC源码分析之ShardingSphereConnection的创建原理
  • 分享C++程序员面试八股文(九)
  • 《动手学深度学习》笔记2.1——神经网络从基础→进阶 (模型构建→参数初始化→设计层/块→磁盘读写→多GPU加速)
  • RPC框架开发——理解项目功能
  • 可看见车辆行人的高清实时视频第2辑
  • unity CustomEditor的基本使用
  • vue强制刷新组件的三种方式:$forceupdate、v-if、key
  • Spring Boot 学习之路 -- 处理 HTTP 请求
  • 基于深度学习的花卉智能分类识别系统
  • 仿黑神话悟空跑动-脚下波纹特效(键盘wasd控制走动)
  • 五种方式帮你提升独立站销售额