深入理解工具链-基于Eclipse的嵌入式IDE快速入门

目录

一、前言

二、鸟瞰各家Eclipse IDE

2.1 原版Eclipse

2.2 迈来芯MLXIDE

 2.3 STM32CubeIDE

2.4 S32DS

三、工程管理

3.1 选择和创建新的工作空间

3.2 同时打开两个工作空间

3.3 切换工作空间

3.4 导入工程

3.5 选择合适的工程代码编码方式

四、常用技巧

4.1 切换主题

4.2 改变字体大小和颜色

4.3 添加模块窗口

4.4 常用图标介绍

4.5 常用默认快捷键

4.6 GCC的并行编译

4.7 开启并行编译

4.9 编译器选项(STM32CubeIDE)

五、工程调试技巧

5.1 查看.elf和.map文件

5.2 查看反汇编文件

5.2.1 S32DS生成反汇编文件

5.2.2 STM32CubeIDE生成反汇编文件

5.3 打断点

5.4 查看变量、寄存器、修改变量

5.5 查看内存

六、高阶技巧之Git版本管理

6.1 Git简介

6.3 注册并新建代码仓库

6.5 在IDE中初始化仓库

6.6 打开GIT管理模块

6.7 进行第一次本地提交和推送

6.8 添加远程仓库

6.9 查看远程仓库

6.10 从远程仓库将工程导入IDE

七、高阶技巧之外部工具的使用

八、总结


一、前言

Keil和IAR一直以来都是嵌入式编程IDE的标杆,从51到ARM、AVR、再到各家私有内核开发都它们的身影。近几年,众多MCU厂商却都在大力发展自家的免费IDE,力图摆脱KEIL和IAR的垄断局面。而这些免费IDE大都基于Eclipse深度定制而来,如迈来芯的MLXIDE、ST的CubeIDE、TruStudio、NXP的S32DS、TI的CCS、再到最近比较火热的Risc-V,国内Risc-V处理器的领军企业芯来科技开发的Nuclei Studio IDE,都是Eclipse的定制产品,它们不同LOGO背后,都是Eclipse+SDK插件+代码生成插件+编译器+调试服务器的工具大集合。

基于上述原因,笔者结合自己开发过程中所接触的Eclipse开发环境,从代码编辑、工程管理、仿真调试、常用技巧等几个方面介绍Eclipse的使用技巧,本文主要以NXP的S32DS及STM32CubeIDE作为示例展开介绍,笔者水平有限,无法面面俱到,如果错漏,烦请指出。

二、鸟瞰各家Eclipse IDE

2.1 原版Eclipse

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第1张图片

2.2 迈来芯MLXIDE

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第2张图片

 2.3 STM32CubeIDE

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第3张图片

2.4 S32DS

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第4张图片

          单从界面来看,这几个IDE如出一辙,但这并不难理解,毕竟IDE的功能就是代码编辑和编译调试,Eclipse本身是一个极为优秀的代码编辑器,各家IDE只要套用其代码编辑和插件管理系统,加上配套的工具链就可以做得足够好用。

三、工程管理

        Eclipse的工程会有各自的工作空间,每个工作空间对应不同的用户配置,工作空间一般在第一次安装IDE打开时选择,实际上,工作空间可以不唯一,用户可以根据自己使用需要,建立多个工作空间管理不同系列的工程。

         笔者习惯建立一个主工作空间,以及一个备用工作空间,备用空间用于调试测试代码,主工作空间用于发布正式代码,使用上来说,主空间在管理时需要严谨一些,备用空间则可以随意。

3.1 选择和创建新的工作空间

         打开IDE的时候会有以下弹窗,可以根据需要新建工作空间或选择已有工作空间。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第5张图片

   

3.2 同时打开两个工作空间

再次打开IDE,可以选择不同的空间,此时,配合双屏,可以方便的对比两个工程的代码异同。

3.3 切换工作空间

      若电脑硬件资源有限,不允许同时开启多个工作空间时,可以从当前工作空间切出,选择其他工作空间。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第6张图片

  

3.4 导入工程

      Eclipse的工程支持不同工作空间互相导入,导入时,可以选择是否将原工程的所有文件复制到当前工作空间中。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第7张图片

3.5 选择合适的工程代码编码方式

      代码本质上是文本文件,文本编码的不同,可能导致代码中文注释成为乱码,通常在建立工程时就应注意工程编码,与项目团队的其他成员统一,避免工程导入到对方电脑出现注释乱码。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第8张图片

  GBK编码适用于大部分中文场景,但UTF-8兼容性更好

四、常用技巧

4.1 切换主题

      进入:菜单栏->Preference->Appearance,可以选择自己喜欢的主题,支持自定义背景,默认的选择比较少,只有深色浅色可选。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第9张图片

   

       http://www.eclipsecolorthemes.org/是一个eclipse主题收集网站,从该网站上下载到的主题,可通过import->General->preference导入IDE使用。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第10张图片

4.2 改变字体大小和颜色

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第11张图片

  

4.3 添加模块窗口

      Eclipse的很多插件默认并不显示在主界面中,需要自行添加。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第12张图片

  

其中,常用模块功能如下:

  Build Target:通过make工具编译工程

  C/C++ Projects:工程管理界面

  Console:控制台,用于打印编译输出信息和调试信息

  OutLine:代码及函数的快速预览类视图

  Problems:编译报错和警告显示窗口

  Project Explorer:工程资源管理器

4.4 常用图标介绍

:增量编译按钮,只编译有改动的文件。

:全部编译,清除所有目标文件,重新执行编译操作。

:跳过所有断点

:新建工程

:新建源代码目录

:新建C源码文件

:开始下载和调试工程

:执行调试任务

:运行外部工具

:块编码模式,列对齐情况下,同时编辑多行文本

:后退,查看代码时很有用

:前进,查看代码时很有用

4.5 常用默认快捷键

  1. 单行注释:"Ctrl" + "/"
  2. 多行注释:"Ctrl" + "Shift" + "/"
  3. 取消多行注释: "Ctrl" + "Shift" + "\"
  4. 代码上移一行:Alt+上方向键
  5. 代码下移一行:Alt+下方向键
  6. 后退:Alt+左方向键
  7. 前进:Alt+右方向键
  8. 快速移动代码:鼠标左键拖动选中代码
  9. 快速复制代码:按住Ctrl+鼠标左键拖动选中代码
  10. 删除选中行:"Ctrl" + "D"
  11. 编译全部:"Ctrl" + "B"
  12. 搜索替换:"Ctrl" + "F"
  13. 快速减小字体:"Ctrl" + "-"
  14. 快速增大字体: "Ctrl" + "shift" + "+"
  15. 保存文件:"Ctrl" + "S"

4.6 GCC的并行编译

      基于Eclipse的IDE大都使用MakeFile管理工程,并通过Make指令编译,大部分基于GNU的工具链,均支持并行编译,开启并行编译后,可以充分利用电脑的多核资源,加快代码编译速度。目前笔者使用过的Eclipse系IDE中,仅有MLXIDE不支持。

      S32DS关闭并行编译(编译耗时:33秒)

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第13张图片

      S32DS开启并行编译(编译耗时:9秒):

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第14张图片

 可见开启并行编译,可以大幅加快编译速度,理论上核心数越多,加速效果越明显,笔者电脑使用6核6线程编译,加速已经可以达到3倍以上效果。

4.7 开启并行编译

Eclipse的GNU工具链通常开启并行编译的方法如下图所示:

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第15张图片

  开启并行编译后,对应的编译指令由make all会变成make -j all。

4.8 编译器选项(S32DS)

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第16张图片

  工程名右键->Properties->C/C++ Build->Settings下对应这编译各个阶段的配置,典型的有:

  编译器:修改优化等级、添加头文件路径

  汇编器:添加汇编宏定义和优化

  链接器:  添加库文件和链接脚本

  镜像拷贝工具: 生成BIN文件或者HEX等Flash镜像文件

  打印储存占用工具:打印程序各个段的存储占用大小

  反汇编工具:用于反汇编出汇编指令,方便调试代码时使用

4.9 编译器选项(STM32CubeIDE)

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第17张图片

  其他IDE大同小异,凡是与编译器相关的设置,通常都在这里。

4.10 屏蔽错误提示和拼写检查

        有些基于Eclipse的IDE代码分析做得并不好,或者由于工程本身原因,会出现一些错误提示,但编译本身并无问题。比如,某些符号无法解析,或者有些宏定义识别不到等,通常会在工中给出提示。这类问题对于强迫症来说无疑是很难受的,此类问题可以通过关闭IDE内置的代码分析功能解决。

        深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第18张图片

         将上图中需要关闭的代码分析项关闭即可。

五、工程调试技巧

5.1 查看.elf和.map文件

      GNU工具链编译后通常会生成elf文件,其中包含了程序内容、编译时的符号(C变量、C函数、汇编标号等)、调试信息、MCU存储划分和占用情况。但elf文件是二进制文件,无法直接打开,通常需要借助工具链自带的readelf工具才能查看。为了便开发调试, IDE还会把elf中的内容以文本的形式打印,这个文本文件就是map。借助map文件,可以查到变量的存储地址,函数的运行地址,及各个函数和变量的存储占用情况,及各自所属的源文件,map文件通常位于Debug文件夹或者Release文件夹。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第19张图片

         图示圈出部分表示笔者工程生成的main函数运行地址为0x01029010,占用大小0x408字节空间,所属文件为ert_main.c

5.2 查看反汇编文件

      某些情况下,调试过程中单纯查看C代码无法定位问题,需要借助编译后的汇编指令,此时,可以借助工程的反汇编文件帮助定位问题。

5.2.1 S32DS生成反汇编文件

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第20张图片

 深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第21张图片

5.2.2 STM32CubeIDE生成反汇编文件

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第22张图片

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第23张图片

5.2.3 反汇编文件内容格式

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第24张图片

      通常,从左至右三列依次为:指令运行地址、二进制指令内容、二进制指令对应的汇编指令。

5.3 打断点

      Eclipse系列的IDE打断点与KEIL和IAR操作基本一致,都是在代码左边空白处双击。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第25张图片

5.4 查看变量、寄存器、修改变量

        选中变量后点击鼠标右键->Add Watch Expression,即可将全局变量加入监测窗口,监视窗口除全局变量外还可以查看其他内容。

        变量内容需要暂停后才能显示,暂停期间,可以在显示窗口中输入新值,实时改变程序中的变量内容。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第26张图片

5.5 查看内存

     添加内存查看窗口后,可以直接输入地址查看地址对应内容

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第27张图片

六、高阶技巧之Git版本管理

6.1 Git简介 

        Eclipse系列的IDE绝大部分都支持使用GIT进行项目管理和团队合作,通常在构建大型项目时,会有多位成员参与项目代码编写,代码发布前可能存在多个版本,这些因素都会导致代码版本众多,管理不便。GIT就是为了解决这些问题而诞生的一个版本管理工具,GIT可以将每一次提交做增量式记录,代码提交人,提交时间,更改的具体内容,版本之间的差异都可以非常方便的追溯。

      配合GIT,可以将项目代码托管到代码仓库中,目前主流的代码仓库如GitHub和Gitee,都支持GIT版本管理。二者区别是,GitHub仅对开源代码提供免费仓库,私有仓库需要付费,且因其服务器在国外,下载和同步较慢。Gitee则是开源中国提供的免费代码托管平台,其面向个人提供免费的私人仓库和开源仓库,项目没有github多,但是速度快,且私有仓库免费,仅作为仓库来说,使用体验非常好,笔者平常用gitee更多一些,gitee的中文名称叫“码云“。

      笔者在此教程中以STM32CudeIDE为例,将STM32F0的一个DEMO工程上传至代码仓库,并对工程修改,再次提交推送至仓库,视为一次项目代码更新,并且演示使用git克隆代码仓库并导入IDE。

6.2 下载安装GIT

官方下载链接如下:Git - Downloads,其具有良好的跨平台特性,同时支持三大主流电脑系统。读者根据自身情况下载需要的即可,下载完成后安装即可,安装过程中保持默认选项即可,不需要额外勾选,安装过程此处省略。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第28张图片

6.3 注册并新建代码仓库

      代码托管到代码仓库的一大好处就是方便同步和管理,笔者自己的典型使用场景是,下班前在A电脑上完成项目代码提交和推送,回家后通过代码仓库同步代码到家里B电脑。如果是开源代码,还可以方便的共享。

      在使用这些功能之前,需要有一个代码仓库平台的账号,并将主机上安装的GIT和远程仓库绑定。绑定过程通过GIT生成的公钥和私钥配对实现,当然,即使不生成公钥私钥也可以通过账号和密码推送访问。

笔者这里推荐国内的码云,请读者注册码云账号后,通过以下码云官方的帮助文档完成GIT的初始化和绑定。

  1. 初次运行 Git 前的配置
  2. 生成/添加SSH公钥

笔者后文的步骤默认读者已经下载安装GIT,并绑定代码仓库。

6.4 新建代码仓库

        开始管理一个工程前,需要先在代码托管平台新建一个仓库,

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第29张图片

           笔者此处演示的是STM32F0的一个简单LIN总线DMEO功能,因此新建仓库名称为:“STM32F0_LINBoard”,仓库创建为私有仓库。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第30张图片

         新建仓库成功后,出现以下页面,请复制仓库链接备用,若复制http链接,后续步骤关联远程仓库时,需要输入账号和密码,如果复制ssh链接,因为5.3中已经添加了公钥私钥对,可以免去输入账号密码这一步骤。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第31张图片

6.5 在IDE中初始化仓库

推送仓库前需要在在IDE中初始化本地仓库

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第32张图片

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第33张图片

  

6.6 打开GIT管理模块

GIT Staging用来在IDE中进行本地代码提交和推送,默认是关闭的,需要读者自行打开,步骤如下图。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第34张图片

6.7 进行第一次本地提交和推送

       按下图所示,将所有改动的文件加入暂存区后,Commit执行本地提交,Commit and Push为执行本地提交且推送到远程仓库,提交前别忘了添加提交信息(笔者此处输入了“第一次提交”)

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第35张图片

6.8 添加远程仓库

      第一次提交会因为没有关联远程仓库而弹出提示,此时只需要将5.4步骤中复制的远程仓库信息录入,并输入远程仓库的账号和密码,继续执行推送即可。

使用http链接时,需要输入账号和密码,使用ssh链接,则无需输入账号和密码。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第36张图片

6.9 查看远程仓库

此时查看远程仓库,可以看到,代码成功推送给到了远程仓库。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第37张图片

  笔者对工程添加一个版本说明,并进行第二次提交推送。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第38张图片

    再次查看远程代码仓库,可以看到笔者第二次提交仅修改了一个文件的内容。

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第39张图片

6.10 从远程仓库将工程导入IDE

      实际工作中,常常需要将自己的代码分析给团队其他成员,此时,若该成员已在项目仓库成员列表中,则可以直接访问远程仓库,导出工程到IDE。

      笔者此处新建一个名为TEST的工作空间,将远程代码仓库的工程导入该空间。

1.新建工作空间

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第40张图片

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第41张图片

  

2.使用仓库地址从GIT将工程导入IDE

      笔者此处的地址依然是代码仓库创建时的地址,http地址和SSH地址都可以

  

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第42张图片

     

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第43张图片

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第44张图片

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第45张图片

深入理解工具链-基于Eclipse的嵌入式IDE快速入门_第46张图片

      至此,导入成功,工程可以正常编译,笔者此处所列,仅是GIT的基础用法,有兴趣的读者,可以参考码云的帮助文档,进一步学习。

七、高阶技巧之外部工具的使用

      Eclipse系列IDE除了厂商支持的插件以及eclipse的通用插件外,用户还可以在使用过程中,自己添加外部工具,辅助完成工作,例如,运行一些脚本,某些不直接被官方支持的兼容调试工具等。由于这部分内容笔者已经单独撰文详述,此处给出链接,供读者参考,对外部工具使用有兴趣的读者请移步:通过External Tools在STM32CubeIDE下使用DAP-LINK。

八、总结

      Eclipse功能强大,涉及细节众多,奈何笔者精力水平有限,暂探索至此,希望对读者有所帮助,未来若有发现,将继续更新。

你可能感兴趣的:(eclipse,stm32,嵌入式)