查看原文
其他

关于使用VS Code开发stm32的一些感想

mculover666 电子开发学习 2021-01-31
本文长度为2179,建议阅读6 分钟



1引言


这几天在推【宇宙最强编辑器VS Code】专栏系列文章,不少群聊和文章的留言都是关于使用VS code 进行stm32开发和调试,看到后思绪万千,不知如何回复,决定暂停更新,结合自身的经历写篇文章来回复这个问题。

两年前我还是一个小萌新,老老实实的使用keil-MDK开发,我认识的一个学长在Linux方面非常强,当我第一次见到可以在满屏代码的条件下玩单片机,瞬间颠覆了我的认知,原来开发可以如此炫酷。

我开始接触Linux这个神奇的东西,在电脑上装了Ubuntu16.04,踏上Linux学习之旅,跟着网上诸多的教程搭建Linux下stm32的开发环境,两年多的时间里搭建了不少于5次,每次都要至少花费6-8个小时,结果都以失败告终。

直到上学期学校开设了Linux课程,我才得以系统的学习了Linux基础命令,C语言的编译链接过程,gcc和gdb工具的使用,makefile的编写,另外一方面,由于一直使用stm32做项目,对stm32也比较熟悉,之后我再次折腾了一下,花了不到一个小时的时间就配置好了,很有成就感,整个过程写了博客,公众号,在野火论坛也发帖分享。

感兴趣的小伙伴可以点击下面的链接查看:

回顾整个过程,我有以下几个方面的总结分享,共勉。


2关于环境搭建

开发stm32的程序需要使用交叉编译工具链gcc-arm-none-eabi,ARM为三个平台都提供了该工具,可以在其官网下载到:

关于该工具的安装和配置,如果有Linux操作基础,非常简单,只有三步:

  • 下载

  • 解压

  • 配置环境变量

关于该工具的使用,因为是基于gcc的,如果使用gcc开发过c语言程序,使用方法基本相同

编译得到可执行文件后,可以使用openocd将程序写入单片机运行。

openocd(http://openocd.org)全名叫做Open On-Chip Debugger,是一个自由开放的片上调试工具和编程工具,目前已经发布到0.10.0版本,目前主流调试器几乎都支持,它的项目托管在sourceforge上,同样支持Windows平台和Linux平台。

下载之后,如果有Linux操作基础,执行其中的安装脚本程序即可

总结为一句话:如果有Linux操作基础和gcc基础,搭建开发调试环境非常容易,即使没有任何Linux基础,跟着教程也能搭建成功。


3难点一 —— 链接文件及链接过程


在日常开发中编译这个词广为人知,但是链接却很少有人了解,这是因为Keil MDK给我们屏蔽了这一过程,导致普遍认知是 —— “源代码编译之后生成可执行文件”。

其实C语言程序,特别像单片机开发中这样文件非常多的,一个固件库就能有几十个c文件,头文件就不说了,都懂,要经历四个过程:

  • 预处理:处理每个C文件中的预处理指令;

  • 编译:将每个文件中翻译为汇编语言;

  • 汇编:将汇编语言翻译成机器码,通常叫.o目标文件,每个c文件对应一个目标文件;

  • 链接:将所有目标文件以及依赖库进行链接,生成可执行文件

可以看到,最重要的不是编译,因为编译器干的活太简单了,只是针对每个文件进行编译,不受其他影响,但是链接器就不一样了,链接器不仅要顾全大局,而且要默默无闻的干活

  • 将所有的目标文件进行链接;

  • 需要将启动文件链接在程序最开始,否则运行出错;

  • 链接过程必须要根据链接文件安排;

因为链接过程的复杂性,加上每个单片机的flash和SRAM的大小都不一样,所以链接文件别说自己编写,就是去找现有的,也是一件比较难的事情,当时我是参考了truestudio,直接拿truestudio的链接文件过来用才相对那么容易。

即使有了链接文件,在编译和链接过程中需要带非常多的参数,尤其是链接过程,不是我危言耸听,这些参数错一个就会导致失败


4难点二 —— makefile的编写

stm32的开发都是基于标准库和HAL库的,HAL我暂且没试,拿标准库来说,需要编写makefile文件,构建整个编译关系,这个其实不是太难,理解了makefile的一些自动变量规则和隐含规则后,就很好编写出这个makefile了,在以后的开发中,只需要进行一些简单的修改就可以了:


5关于VS Code

说了这么多,是该回归正题了,关于要不要使用VS Code开发stm32简述一下个人观点。

VS Code只是一个轻量级编辑器,就像上篇文章中使用VS Code进行C/C++语言开发,我们只是使用了它的编辑器功能而已,随便写一个小程序很方便,但是程序稍微复杂点的话,重点还是makefile如何编写,VS Code只是调用执行一下make命令而已。

同样,使用VS Code开发stm32,重点还是在环境搭建,链接文件,makefile文件上,我个人认为,如果对gcc和makefile这些很熟悉了,想要追求更高的效率,可以折腾一下玩玩,如果Linux还没有入门,不值得花费大把大把的时间再去折腾了,老老实实用MDK吧,不要本末倒置,你的初衷是学习单片机。

当然如果实在想折腾一下,那就折腾一下吧,尽管花费了大量的时间,但是会学到非常非常多的知识,在后续进行嵌入式Linux的开发会有非常大的帮助,折腾一番后,对于单片机的开发就如庖丁解牛一般~

要添加微信交流讨论群的用户可以添加微信公众号客服并发送消息说明要添加的群(四轴、STM32、ESP8266、PCB设计四个群选择其一),微信公众号客服微信号:electricstudyer,二维码如下:




历史好文集合(点击标题可跳转):

四轴学习课程连接、资料分享、交流群汇总

PCB设计就别再用AD了,有更好的选择!

[飞控]从零开始建模(一)-牛顿欧拉方程

开源STM32F1小四轴完整资料发布一(源代码、原理图、3D库、PCB)

如何制作炫酷的PCB板3D效果图

基于面向对象思维的STM32开发基本思路--以GPIO口的操作为例

灵动微MM32F103C8T6使用初体验

原来飞机还可以这样玩——手拋飞机改无刷背推



你点的每个好看,我都认真当成了喜欢


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存