project generator 简单使用

文章目录

    • 1 progen 资源
    • 2 使用简介
      • 2.1 安装
      • 2.2 添加 target(可选)
      • 2.3 替换 CMake 模板(可选)
      • 2.4 创建 progen 项目
    • 3 总结

1 progen 资源

  • 0)简介:progen(project-generator,项目生成器)是 ARM 编写的,基于 Python 的,让我们的项目跨工具的神器。所谓跨工具,类比一下 Java 的跨平台,即代码编写完成后,可以生成为基于 uVision、IAR、Makefile(cmake)等编译工具的项目。

  • 1)官网:

    • progen: https://pypi.org/project/project-generator/
    • progendef: https://github.com/project-generator/project_generator_definitions
  • 2)官方示例:

    • https://github.com/project-generator/project_generator_frdm_boards_example
    • https://github.com/project-generator/project_generator_mbed_examples
  • 3)本例:

    • 学习 B 站 UP 主 “江协科技” STM32 视频(https://jiangxiekeji.com/)
    • 基于光子物联的 STM32G431CBT6 开发板
    • ll 库代码:https://gitee.com/luyaocf/demo-jxtech_stm32g4_ll.git

2 使用简介

  • 1)progen 的几个组件:

    • (1)Record:基于 YAML 语法的配置文件,有 3 种:

      • 项目列表文件 projects.yaml,声明配置项、模块、项目等
      • 项目定义文件,即主工程文件,其中定义工程名称,开发板,等
      • 模块文件,定义模块的头文件与源文件
    • (2)Tool:泛指嵌入式开发工具,如 uVision、IAR、CoIDE、Makefile(gcc/armcc/cmake)等等

    • (3)Target:泛指 mcu。其内部指定 MCU 的 RAM、ROM、CPU 内核、SFD、烧录算法等令牌。progen 根据 target 生成指定 tool 的工程文件,如 Keil5 的 .uvprojx、IAR 的 .ewp 等

  • 2)progen 的几个命令:

    • (1)init:将当前项目初始化为 progen 项目。当你已经有一个 uVision5 项目时,可以在其根目录直接使用该命令,将该项目变成一个 progen 项目。然而就像 PCB 中的自动布线一样,可以使用但不要完全使用,因为我们想要的不是 progen <-> uVision,而是 progen -> uVision、IAR、CMake 等等

    • (2)generate:生成指定 Tool 的项目。当我们有一个 progen 项目时,可使用该命令生成基于 Tool 的任何工程

    • (3)clean:清理生成的项目。

    • (4)list:列出当前 progen 支持的 targets(MCU), tools(IDE 或 toolchain) 或工程

    • (5)build:构建指定工程。

2.1 安装

  • 1)安装 Python

  • 2)安装 progen

    pip install project-generator
    

2.2 添加 target(可选)

  • 1)progen 安装完成后,在目录 %PYTHON_HOME%\Lib\site-packages\project_generator_definitions\mcu 下,按照厂商列出了 progen 支持的所有 mcu target。但总有些不常用的 mcu 尚未支持,需要我们手动创建 target。比如我这里使用的 STM32G431CBT6 芯片,progen 尚未支持。

  • 2)幸运的是我们不用手动编写 target 配置文件,progen 提供了 progendef 命令来帮我们自动生成添加 target 的配置文件:

    • (1)使用 STM32CubeMX 生成一个基于 STM32G431CBT6 的 uVision5 项目,如 STM32G431CBT6.uvprojx。(当然,其它厂商的 mcu 只要提供了基于 Keil uVision5 的项目都可以。事实上,progen 还支持基于 IAR 项目的生成。)

    • (2)找到 STM32G431CBT6.uvprojx 所在目录,在命令行中执行以下命令:

       progendef create -m stm32g431cbtx -t uvision5 -f STM32G431CBT6.uvprojx
      
    • (3)将生成的 stm32g431cbtx.yaml 文件复制到
      %PYTHON_HOME%\Lib\site-packages\project_generator_definitions\mcu\st\ 目录下,然后我们在生成 uVision5 项目时即可引用到它。

2.3 替换 CMake 模板(可选)

  • 1)progen 中使用的 cmake 版本为 3.6,而 STM32CubeMX 生成的代码中 cmake 版本最新为 3.27(于 2024.3.8),所以这里更新一下 progen 的 cmake 模板。

  • 2)首先尝试在项目中指定 cmake 模板,发现无法生效。最终发现:

    • (1)首先找到 %PYTHON_HOME%\Lib\site-packages\project_generator\templates 目录
    • (2)备份 cmakelist_gccarm.tmpl 文件
    • (3)将本项目 records/tools/cmakelist_gccarm.tmpl 文件替换该文件
  • 3)对比过后,新版本的 cmake 编译速度提升了,配置内容清晰,生成的目标文件减少,使用确实更加方便。

2.4 创建 progen 项目

  • 1)ARM 官方的 DAPLink 项目是基于 progen 应用的一个项目,我们可以参考它来使用。

  • 2)我们可以先使用 STM32CubeMX 生成 uVision5 项目和 CMake 项目,然后分别在两个项目的根目录执行 progen init 命令来分别生成 progen 项目,最后提取其中的配置文件并组装成我们需要的项目。

  • 3)配置完成后,便可以通过以下命令来生成项目了:

    progen generate -t cmake -v -p jxtech031_blink      # 生成 CMake 项目
    progen generate -t uvision5 -v -p jxtech031_blink   # 生成 uVision5 项目
    
  • 4)项目根目录下提供了一个 generate.bat 批处理脚本,用来自动生成项目:

    -----------------------------------------------------------------------------------project generator
    -----------------------------------------------------------------------------------code    project                       code      project
    [031] jxtech031_blink                 [091] jxtech091_usart
    [032] jxtech032_waterlight            [092] jxtech092_usart_recv
    [033] jxtech033_buzzer                [093] jxtech093_usart_hex
    [034] jxtech034_keyled                [094] jxtech094_usart_txt
    [035] jxtech035_ldr                   [101] jxtech101_i2c_mpu6050
    [041] jxtech041_oled                  [102] jxtech102_i2c_mpu6050
    [051] jxtech051_exti                  [103] jxtech103_i2c_24cxx
    [061] jxtech061_timer_it              [111] jxtech111_spi_w25qxx
    [062] jxtech062_timer_externalclk     [112] jxtech112_spi_w25qxx
    [063] jxtech063_timer_pwmled          [113] jxtech113_spi_tftlcd
    [064] jxtech064_timer_pwmservo        [121] jxtech121_bkp
    [065] jxtech065_timer_pwmmotor        [122] jxtech122_rtc
    [066] jxtech066_timer_inputcapture1   [131] jxtech131_systemclk
    [067] jxtech067_timer_inputcapture2   [132] jxtech132_mode_sleep
    [068] jxtech068_timer_encoderspeed    [133] jxtech133_mode_stop
    [071] jxtech071_adc_singlechannel     [134] jxtech134_mode_standby
    [072] jxtech072_adc_multichannel      [135] jxtech135_mode_shutdown
    [080] jxtech080_memory                [141] jxtech141_iwdg
    [081] jxtech081_dma                   [142] jxtech142_wwdg
    [082] jxtech082_dma_adc               [151] jxtech151_flash[1] generate all     [2] clean all    [0] exitInput the code:
    
    • 要生成多个工程时,可以输入多个编号,以空格分隔。

3 总结

  • 1)使用 progen 带来的几点好处:

    • (1)跨工具。对于一个代码仓库的协作开发来说,无疑是极大的方便,它可以满足习惯于不同开发工具的协作者。

    • (2)破除木桶效应。如果你还在纠结 Keil 的丑界面,CLion 基于 OpenOCD 的基本调试,ARM GCC 的编译效率,那么 progen 值得拥有。它可以让我们可以使用 Keil uVision 方便的调试功能 + CLion 的代码提示功能 + ARMCLANG 强大的代码编译能力。

    • (3)减少代码量。当我们学习一个教程时,往往会按照章节创建对应的项目,无疑会产生非常多的冗余源文件,比如 STM32 的 HAL 库文件。使用 progen 可以在 projects.yaml 定义所有的项目,然后将 HAL 库文件声明为模块并复用它。

  • 2)不建议使用的情况:

    • 单个项目。如果只有单个项目,即使需要跨工具开发,使用 STM32CubeMX 会比使用 progen 更有性价比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

·xss文件上传漏洞

xss文件上传漏洞 本质&#xff1a;对上传的文件不加限制的漏洞&#xff0c;例如上传PHP文件。 面对一定程度上的防护&#xff0c;我们应该如何绕过。 一&#xff0c;一句话木马&#xff1a; <&#xff1f;php Eval($.post{})> ::$DATA ([‘pass’]); ?> 再ur…

C语言 - 各种自定义数据类型

1.结构体 把不同类型的数据组合成一个整体 所占内存长度是各成员所占内存的总和 typedef struct XXX { int a; char b; }txxx; txxx data; typedef struct XXX { int a:1; int b:1; …

字节一面:TCP 和 UDP 可以使用同一个端口吗?

数据包是计算机网络通信的核心&#xff0c;包含头部和数据负载。TCP和UDP协议在传输层使用端口号区分服务和应用。操作系统通过IP头部中的协议字段和端口号来管理网络流量&#xff0c;确保TCP和UDP流量即使共用端口号也不会相互干扰。 在现代计算机网络中&#xff0c;数据传输…

基于Springboot的代驾管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的代驾管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

【DAY11 软考中级备考笔记】数据结构 查找和排序

数据结构 查找和排序 3月12日 – 天气&#xff1a;晴 1. 顺序查找 顺序查找就是简单的从头一个一个的进行比较&#xff0c;注意它的平均查找长度 2. 折半查找 折半查找和二叉排序树一致&#xff1a; 优点&#xff1a;查找效率很高 缺点&#xff1a;要求必须是循序存储并且表中…

《计算机网络》考研:2024/3/11:2.1.6-习题精选(5、6题暂未完成)

2024/3/11 2.1.6 习题精选 一、单项选择题 我的答案&#xff1a;1.D 2.A 3.C 4.B 5.A 标准答案&#xff1a;1.D 2.A 3.B 4.B 5.A 3、【解】&#xff1a; 并行传输的特点&#xff1a;距离短、速度快。 串行传输的特点&#xff1a;距离长、速度慢。 在计算机内部通常为了保证速…

基于 Jenkins 搭建一套 CI/CD 系统

一、CI/CD环境介绍 本次要实现如下效果&#xff0c;开发人员完成功能开发并提交代码到gitlab仓库&#xff0c;jenkins自动完成拉取代码、编译构建、代码扫描&#xff08;sonarqube&#xff09;、打包&#xff0c;再自动化完成部署到Tomcat服务器提供访问。 环境准备三台Centos…

机器学习/深度学习 模型修正能力

一、模型修正 在了解模型修正能力之前&#xff0c;我们现在了解下‘模型修正’。 在深度学习模型训练中&#xff0c;模型通过反向传播计算损失函数的梯度&#xff0c;基于梯度利用梯度下降等优化算法更新模型参数以最小化损失函数。这个过程被称为‘模型修正’。 二、模型修正…

Linux - tmux命令

0、常用参数 tmuxnew-s<name> 新建名为name的会话&#xff08;无-s参数则默认以数字命名&#xff09; &#xff08;常用&#xff09; tmux a 恢复上一次的会话 &#xff08;常用&#xff09; tmux a-t<name> 恢复&#xff08;attach&#xff09;名为name的会话 &a…

springboot/ssm甘肃印象网站Java地区特产文化交流管理系统web

springboot/ssm甘肃印象网站Java地区特产文化交流管理系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;…

搜索引擎SEO策略介绍

baidu搜索&#xff1a;如何联系八爪鱼SEO baidu搜索&#xff1a;如何联系八爪鱼SEO baidu搜索&#xff1a;如何联系八爪鱼SEO 第一、 关键词的选择策略&#xff1a; 1、门户类的网站关键词选择策略&#xff1a; 网站每个页面本身基本都包含有关键词&#xff1a;网站拥有上百…

Linux上部署zabbix 6.x

建议大家使用Rocky Linux 8.X https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.9-x86_64-minimal.iso 1> 配置安装yum源 [rootzabbix ~]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/7/x86_64/zabbix-release-6.2-3.el8.noarc…

Centos7安装Clickhouse单节点部署

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

Go——下划线

"_"是特殊标识符&#xff0c;用来忽略结果。 1. 下划线在import中 在golang中&#xff0c;import的作用是导入其他package。 import下划线的作用&#xff1a;当导入一个包时&#xff0c;该包下的文件里所有init()函数都会被执行&#xff0c;然而&#xff0c;有些时候…

FreeRTOS学习笔记-基于stm32(5)列表和列表项

一、列表与列表项简介 列表是FreeRTOS中的一种数据结构&#xff0c;类似双向循环链表。用来跟踪FreeRTOS中的任务。列表项就是存放在列表中的项目。 二、列表 列表结构体&#xff1a; typedef struct xLIST {listFIRST_LIST_INTEGRITY_CHECK_VALUE //校验值c…

Elasticsearch基础操作

一、Restful接口 Elasticsearch通过RESTful接口提供与其进行交互的方式。在ES中&#xff0c;提供了功能丰富的RESTful API的操作&#xff0c;包括CRUD、创建索引、删除索引等操作。你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上&#xff0c;你甚至可以使用 curl …

k8s简单架构图

背景 k8s目前应用的很广泛&#xff0c;它其实也是采用分布式系统中最常见的一个master管理节点多个worker节点的方式构成的&#xff0c;本文就简单看下k8s的架构 k8s架构图 1.管理节点master&#xff0c;master节点主要有三个模块构成 1.1 APIServer模块&#xff1a;这个模块…

记录 Dubbo+Zookeeper 学习Demo

DubboZookeeper ZookeeperZookeeper 下载可能出现的问题 辅助程序下载dubbo-admin项目打包工程打包常见问题 SpringBoot集成Dubbo项目依赖定义服务接口服务端实现服务端配置依赖代码实现 消费端实现服务端配置依赖代码实现 启动 结合Dubbo官网学习如何完成SpringBootDubboZooke…

关于tomcat服务器配置及性能优化的20道高级面试题

1. 请描述Tomcat服务器的基本架构和组件。 Tomcat服务器的基本架构主要包括Server、Service、Connector和Container等组件。具体来看&#xff1a; Server&#xff1a;是Tomcat中最顶层的容器&#xff0c;代表着整个服务器。它负责运行Tomcat服务器&#xff0c;例如打开和关闭…

Mac上.bashrc转.zshrc时,设置PATH环境变量注意事项

由于最近系统坏了刚好就升级了&#xff0c;也就打算使用新的 zsh 了&#xff0c;反正平时在 WSL 和树莓派上用的都是 bash。按理来说应该没有什么困难&#xff0c;但还是遇到了一些问题&#xff0c;都是细节&#xff0c;需要记录一下&#xff0c;防止后续一些东西的更新比较麻烦…