单片机爬坑记-03-编译环境

Posted on 2019-02-24 05:11  Zarlinq  阅读(371)  评论(0编辑  收藏  举报

Arduino IDE是最难用又最好用的单片机IDE,没有之一!难用之处在于没有自动补全(这一点最是难受,但又最是无处说理),库文档也常常不全,时不时就要开Source Insight看看库文件的源代码,很是麻烦;好用之处则在于库管理和开发板管理极为方便,调用某个库的时候需要#include的头文件也是一键完成,尤其适用于新建工程(先把所有头文件#include上)和库管理(开发板相关文件一般不怎么变动)。

寻求一个“能自动补全、方便管理项目、省心省事不折腾、能跨平台作业”的IDE是自然需求,最好这IDE在单片机开发方面还具备高度通用性。

Keil和IAR,由于某些众所周知的原因,直接不考虑。

VSCode(Visual Studio Code)简直就一通用单片机开发IDE神器,目前已经能够搞定整个编码、编译、链接过程的目标平台,主要包括Arduino、STM32、Tiva C、ESP8266(及ESP32)。

Arduino:在VSCode下有两种方案可选,一种是VSCode平台的扩展插件“Arduino”,该插件只要根据提示将Arduino IDE的目录设置好,就能够直接让VSCode完成Arduino代码烧写全部过程,而且离线完成,VSCode自带强悍的自动补全和项目管理,因此这种方式完全可以实现基于Arduino平台的复杂项目开发,对基于Arduino平台的开发而言,此是首选方案;另一种是VSCode平台的扩展插件“PlatformIO IDE”,该扩展插件需要和IoT Utility一并安装,缺点是不能离线操作,也没有插件“Arduino”方便使用,但就Arduino开发而言,算是一个可以考虑的备选方案。

STM32、ESPESP8266(及ESP32):VSCode平台的扩展插件“PlatformIO IDE”在这些具有较常见的芯片及开发板方面,优势是非常明显的,使用时唯一需要注意的主要有三点:1、尽量直接使用插件内“New Project”或“Project Example”建项目,插件能联网自动完成设置文件的处理,否则自行新建文件夹和文件的话,一小堆设置等着慢慢琢磨,浪费时间,如果使用插件内“New Project”或“Project Example”建项目时卡住,可以先关闭工作区(强烈建议使用工作区加载不同配置的方式进行开发),再打开,此时插件重新加载,建项目就比较快;2、不要试图在c_cpp_properties.json文件中更改includePath,插件会自动恢复,所以外部库文件差不多只能放在项目文件夹“include”或“src”中,此时应当特别注意外部库文件中的#include路径问题;3、右键选择“PlatformIO:build”后,插件是启动命令行调用脚本的方式进行编译,而在Windows系统下命令行默认是cmd,cmd这玩意是一个不支持命令行中有空格的落后玩意,所以最好安装Powershell,并在Powershell中用Set-ExecutionPolicy RemoteSigned提升权限(对powershell.exe文件右键“以管理员身份运行”)。(PS:Powershell是极好用的命令行工具,大力推荐!!)(PS:PS:ConEmu是极好用的命令行窗口软件,大力推荐!!)

Tiva C:/*  实际上,在“PlatformIO IDE”中也有对Tiva C的支持,但在“PlatformIO IDE”中新建的Tiva C工程,所包含的库函数较少(基于libopencm3),TI官方可是提供了整整一个TivaWare C,而且TI官方还提供了tidrivers标准库(并不兼容于TivaWare C),这libopencm3、TivaWare C、tidrivers三个库相互不兼容,构成了Tiva C混乱的函数库,其中TivaWare C相对来说是最好用的库(对片上外设和外部设备的支持最丰富),而在“PlatformIO IDE”中新建的Tiva C工程想要使用TivaWare C,首先要面对的是一大堆文件的修改(主要解决#include路径问题)和删除(避免和“PlatformIO IDE”的编译脚本有冲突),而且前面说了“PlatformIO IDE”建的项目不能更改includePath,以至于TivaWare C得全部挪到项目文件夹“include”或“src”中,臃肿且麻烦。  */

因此祭出另一大VSCode另一大杀器,扩展插件“IAR Embedded Workbench”!该插件基本功能是根据IAR的ewp文件对项目进行编译、链接,生成所需的bin文件。使用嘛……打开IAR新建一个工程?不存在的!TivaWare C中有例程example,其中的文件都已经处理好了各项设置,本着尽可能省心省事的基本态度,可以直接将TivaWare C整个文件夹COPY到项目文件夹中,选定一个例程(如examples/boards/ek-tm4c123gxl/freertos_demo),将该例程文件夹整体复制一个备份(方便以后再次使用),在iar.json文件中修改“project”的值(如examples/boards/ek-tm4c123gxl/freertos_demo/freertos_demo.ewp),对于生成的目标bin文件,在dep文件中有<outputs>标签定义了路径,在ewp文件的“OOCOutputFile”项里定义名称,函数入口(一般是main函数)在ewd文件中的“RunToName”项里定义,生成的bin文件可通过TI官方工具UniFlash进行烧写。

该方式好处在于,例程中对于库文件的#include路径已经全部定义好,到手即用。但是麻烦之处在于两点:

1、为了确保#include路径无误,例程文件所在位置一般不应改变,但是为了方便管理,可以在工作区设置文件(code-workspace文件)中增加"folders"项内容,以方便项目管理,例如:

"folders": [

        {

"path": "."

        },

        {

"path": "TivaWareC/examples/boards/ek-tm4c123gxl/freertos_demo",

"name": "freertos_demo"

        },

    ]

2、必须本机IAR能成功编译,IAR本身不能成功编译的在上述方式中同样不能成功编译,例如:Nuvoton系列的单片机,要在IAR下成功编译需要安装一个Nuvoton官方提供的驱动Nu-Link_IAR_Driver,恰巧有时候这Nuvoton的安装文件不正常工作(卡在安装界面不动),导致IAR在编译Nuvoton的单片机项目时缺库,此时由于IAR本身不能成功编译,因此在VSCode下同样无法成功编译(花费一整天时间研究出来的血一般的教训)。

---------------------------------