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.xdnf.cn/news/149122.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Growthly Quest 增长工具:助力 Web3 项目实现数据驱动的增长

作者&#xff1a;Stella L (stellafootprint.network) 在瞬息万变的 Web3 领域&#xff0c;众多项目在用户吸引、参与和留存方面遭遇重重难关。Footprint Analytics 推出 Growthly&#xff0c;作为应对这些挑战的全方位解决方案&#xff0c;其中创新性的 Quest&#xff08;任务…

Python学习——【6.1】文件操作

【6.1】文件操作 一、文件的编码 问题&#xff1a;计算机只能识别0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中的呢&#xff1f; 答&#xff1a;使用编码技术&#xff08;密码本&#xff09;将内容翻译成0和1存入。 编码技术即翻译的…

第 16 章 神兵利器——optimizer trace 表的神器功效

optimizer trace 功能可以让我们方便地查看优化器生成执行计划的整个过程。 SHOW VARIABLES LIKE optimizer_trace;列名描述QUERY查询语句TRACE优化过程的JSON文本MISSING_BYTES_BEYOND_MAX_MEM_SIZE优化过程文本超过最大长度限制后被忽略的字节数INSUFFICIENT_PRIVILEGES有无…

windows自带的录屏功能好用吗?这4款录屏工具也是不错的选择。

因为现在很多人都会有录屏需求&#xff0c;所以平常使用的一些设备当中会有自带的录屏功能。比如windows10系统下只要按下键盘上的 “WinG” 键&#xff0c;就可打开录屏功能。但是录制的时长会有限制&#xff0c;并且录屏功能会有些限制。如果对录屏有更多的需求&#xff0c;可…

牛客周赛 Round 61 (C++实现)

比赛链接&#xff1a;牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) 文章目录 1.致十年后的我们1.1 题目描述1.2 思路1.3 代码 2.简单图形问题2.1 题目描述2.2 思路2.3 代码 3. 小红的机器人构造3.1 题目描述3.2 思路3.2.1 问题13.2.2 问题23…

组合优化与凸优化 学习笔记4 凸优化问题

优化问题基本定义 假如f(x)是方圆R以内&#xff08;R只要大于0就行&#xff09;最好的一个解 等价问题 就是这种优化函数没啥区别&#xff08;乘了个系数&#xff09;&#xff0c;约束们也就多了个系数的情况&#xff0c;这和原本的显然一样。这是等价的最简单的例子。 归根结…

微服务(一)

目录 一、概念 1、单体架构 2、微服务 3、springcloud 二、微服务的拆分 1、微服务的拆分原则 1.1 什么时候拆 1.2 怎么拆 2、服务调用 2.1 resttemplate 2.2 远程调用 一、概念 1、单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;顾名…

JavaScript动态数据可视化

一、引言 在前端开发中&#xff0c;JavaScript无疑是最核心的技术之一。它能够处理各种交互逻辑&#xff0c;实现复杂的功能。本文将通过一个动态数据可视化的案例&#xff0c;展示如何使用JavaScript实现复杂功能。动态数据可视化能够将大量数据以直观、生动的方式呈现&#…

YOLOv10独家改进:红外场景严重遮挡和重叠目标解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

5.03TB高清卫星影像更新(WGS84坐标投影)

最近对WGS84版的高清卫星影像数据进行了一次更新&#xff0c;并基于更新区域生成了相应的接图表。 5.03TB高清卫星影像更新 本次数据更新了6191个离线包&#xff0c;共5.03TB大小&#xff0c;并全部生成了更新范围的接图表。 更新范围接图表 更新范围的接图表由每一个离线包…

蓝牙、WiFi、2.4G、Zigbee、LoRa、NB-IoT的区别与应用场景

在现代科技的推动下&#xff0c;无线通信技术已经成为我们生活中不可或缺的一部分。从智能家居到工业自动化&#xff0c;从远程监控到环境传感&#xff0c;每一种技术都有其独特的优势和应用场景。今天&#xff0c;我们将深入探讨六种主流的无线通信技术——蓝牙、WiFi、2.4G、…

详解常见排序

目录 ​编辑 插入排序 希尔排序&#xff08;缩小增量排序&#xff09; 选择排序 冒泡排序 堆排序 快速排序 hoare版 挖坑法 前后指针法 非递归版 归并排序 递归版 非递归版 计数排序 声明&#xff1a;以下排序代码由Java实现&#xff01;&#xff01;&#xff01…

Python教程: 变量类型

Python 变量类型 变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。 因此&#xff0c;变量可以指定不同的数据类型&#xff0c;这些变量可以存储整…

【计网】从零开始掌握序列化 --- 基础知识储备与程序重构

从零开始掌握序列化与反序列化 1 初识序列化与反序列化2 再谈Tcp协议3 程序重构3.1 Socket类3.2 回调函数设计3.3 最终的Tcp服务器类 1 初识序列化与反序列化 在刚学习计算机网络时&#xff0c;我们谈到过网络协议栈&#xff0c;其中最上层的就是应用层&#xff0c;那么这个应…

97、配置 VXLAN 不同子网互访 (分布式网关)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、基础配置SW1SW2IGP IS-IS 二、VXLAN1.引入库 总结 前言 一、基础配置 SW1 vlan 10 vlan 20interface GigabitEthernet0/0/1port link-type accessport de…

springboot+阿里云物联网教程

需求背景 最近有一个项目,需要用到阿里云物联网,不是MQ。发现使用原来EMQX的代码去连接阿里云MQTT直接报错,试了很多种方案都不行。最终还是把错误分析和教程都整理一下。 需要注意的是,阿里云物联网平台和MQ不一样。方向别走偏了。 概念描述 EMQX和阿里云MQTT有什么区别…

python编程开发“人机猜拳”游戏

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

利用Accelerate()进行pytorch的多GPU加速

简介 官方Github&#xff1a;https://github.com/huggingface/accelerate Accelerate 是为喜欢编写PyTorch模型的训练循环但不愿意编写和维护使用多GPU/TPU/fp16所需的样板代码的PyTorch用户创建的。 它可以仅加速与多 GPU/TPU/fp16 相关的样板代码&#xff0c;并保持其余代…

代码提交消息自动生成助手 | OPENAIGC开发者大赛高校组AI创新之星奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

hive建表指定列分隔符为多字符分隔符实战(默认只支持单字符)_hive row formate ###

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 需要这份系统化资料的朋友,可以戳这里获取 一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎…