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


    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下同样无法成功编译(花费一整天时间研究出来的血一般的教训)。

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

    ------printf("仿佛被囚禁的时间不知所措的变迁,仿佛未知的可能也已经被发现,迎着狂风手插口袋路过你走过的路,荒诞无稽的残酷也拦不住我的脚步…… "); printf("找过无数的理由试着包装我的残缺,而主动承认自己的懦弱却永远无法妥协…… ");------
  • 相关阅读:
    运行Jmeter时,出现java.util.prefs.WindowsPreferences <init>
    Jmeter下载安装及JDK安装
    面试常用-基础理论(五)
    Fiddler (六) 最常用的快捷键
    Fiddler (五) Mac下使用Fiddler
    Fiddler (四) 实现手机的抓包
    Fiddler (三) Composer创建和发送HTTP Request
    Fiddler (二) Script 用法
    Web调试工具——Fiddler介绍
    生成任意位数随机字符串
  • 原文地址:https://www.cnblogs.com/zarlinq/p/10425218.html
Copyright © 2020-2023  润新知