一招通吃MDK5、IAR、GCC

值得推荐的 STM32 开发神技

Posted by Sugar on July 7, 2019

背景介绍:
Sugar 出的很多视频都基于 project-generator 开源项目来支持三平台。
通过反馈发现:这个方法引起了很多读者的兴趣。
参与了 Sugar 的《软件架构训练计划》的群友已经成功驾驭了这个方法。
本文从软件安装开始,系统介绍一下 project-generator 的使用。

首先说一说为什么我选 project-generator

与 CubeMX 和 RT-Thread 的 env 做个对比。
下面将 project-generator 简称为 progen

对比项目 progen CubeMX env
体积
三平台支持 OK OK OK
支持个人已有代码 OK 要设置工程 没用过不清楚
是否必要维护工程 完全不用 加入个人配置就要 没用过不清楚
开源情况 全开源 不开源 不清楚
  • 使用 CubeMX 如果通过配置工程加入了个人代码,万一不小心弄坏了工程,那么就需要生成后重新配置。如果加入了很多个人代码,就比较麻烦了。
  • progen 通过 yaml 配置文件生成工程,完全不用维护工程。需要什么平台(MDK5、IAR、GCC),一条命令生成工程即可。对于三平台,只维护一份 yaml 配置文件就行了

视频展示安装配置过程

bilibili 视频演示 腾讯视频 youtube 视频演示

视频勘误

如果 windows 下的 cmd 如下图所示找不到 progen

C:\Python27\Scripts 加入环境变量,并重启 cmd。解决问题后如下图所示:

加入自定义开发板配置

  • 修改 targets.py

  • 加入自己开发板的 yaml

多工程支持

下面以我精简的 RT-Thread 内核使用 demo 为例,看一看不同工程的配置差异。

如何给自己的工程加入 progen 支持

  • 用 progen 初始化工程,命令示例如下:
progen init -p stm32f4discovery -tar disco-f407vg

  • 自动扫描代码路径后生成 yaml 配置文件

  • 手动修改配置

  • 生成目标工程,命令示例如下:
progen generate -f projects.yaml -t uvision5

Sugar 通过 project-generator 涨了哪些见识

  • 不同平台(MDK5、IAR、GCC)最大的区别是:“汇编源文件”和“链接文件”。对于 CubeMX 生成的工程而言,就是“启动文件”和“链接文件”。
  • 对源码工程的掌握更清晰了,明确知道哪些文件参与了编译。 看过我视频的读者会发现:我用 CubeMX 生成工程时选的是“生成必要文件”(如下图所示),在使用 progen 之前我一直忽略这个设置,因为不知道有什么用。其实 CubeMX 在生成工程时如果不选这项也没关系,会在工程中自动屏蔽掉不相干的文件。这就造成:我虽然能编译,但其实并没有真正掌握生成的源码。直到我用了 progen 方才有了进步。

  • GCC 编译器最严格。 看下 yaml 配置文件,MDK5、IAR 的配置只有几行,而 GCC 就很多(各种 flag,配置错一个都不行)。 我了解 GCC 也是从写 yaml 配置文件开始的。

PS

  • 会用 progen 是参与《软件架构训练计划》的必备技能,因为 Sugar 开源的示例项目都使用 progen。
  • 参与计划的群友在 github 上提了第一个 issue,开了个好头。
  • 在 github 上提 issue 开放交流的好处: (1) 问题自然分类汇总; (2) 参与交流的人多,一人问多人答; (3) 问题易回溯,不用像微信群一样往回翻聊天记录。
  • 很多读者通过微信、微信群、公众号给 Sugar 留言,内容包括:给出建议、指出错误(比如上面提到的视频勘误)等。目前这些还都是只对 Sugar 个人有益,如果能上 github 将会对更多人有益。
  • 望更多人来参与《软件架构训练计划》,大家一起提升,让这个学习成长活动越来越有活力,共同维护一个好的技能成长环境。

关注作者

欢迎扫码关注我的公众号MultiMCU EDU

提示:在公众号“关于我”页面可加作者微信好友。

请我喝杯咖啡如何?

微信 weixinfukuan 支付宝 zhifubaofukuan