一、 前言

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

2.2 迈来芯MLXIDE

2.3 STM32CubeIDE

2.4 S32DS

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

三、 工程管理

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

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

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

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

3.2 同时打开两个工作空间

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

3.3 切换工作空间

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

3.4 导入工程

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

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

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

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

四、 常用技巧

4.1 切换主题

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

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

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 秒)

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

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

4.7 开启并行编译

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

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

4.8 编译器选项(S32DS)

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

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

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

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

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

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

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

4.9 编译器选项(STM32CubeIDE)

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

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

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

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

五、 工程调试技巧

5.1 查看.elf和.map文件

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

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

5.2 查看反汇编文件

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

5.2.1 S32DS 生成反汇编文件

5.2.2 STM32CubeIDE 生成反汇编文件

六、 高阶技巧之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 ,其具有良好的跨平台特性,同时支持三大主流电脑系统。读者根据自身情况下载需要的即可,下载完成后安装即可,安装过程中保持默认选项即可,不需要额外勾选,安装过程此处省略。

6.3 注册并新建代码仓库

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

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

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

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

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

6.4 新建代码仓库

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

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

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

6.5 在IDE中初始化仓库

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

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

6 .8 添加远程仓库

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

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

6.9 查看远程仓库

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

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

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

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

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

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

1.新建工作空间

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

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

八、 总结

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

1 . Eclipse 下载 https://www. eclipse .org/downloads/ 2 . Eclipse 安装只需要解压缩 3 .首次使用 Eclipse 会有一个选择工作空间的弹框 工作空间:保存我们将来在这个 Eclipse 上创建的java程序【一个就可以啦】 4 . 认识 Eclipse 工作台 5 . 设置字体 Window—preferences—>搜索“font”---->Colors and Fonts—Basic----Test Font—Edit… 选择自己需要的字体和
为什么要定制 IDE ?      在工作时候,当公司有了自己的框架,给自己开放人员用,甚至是可以卖的时候,我们可以做成一个产品,而这个产品将包括框架本身、文档、 工具 、教程等等。 工具 之中最重要的莫过于开发 工具 IDE )、调试 工具 。      我在公司里面做的是一个hybrid框架,而一个配套的 IDE 是比不可少的,主要用来开发HTML5。这个 IDE 可以算是框架东西的聚合,可以将在线文档、工程模板、打...
基于 Eclipse 框架的 嵌入式 IDE 实现 摘要:可扩展性框架为软件开发提供了统一的机制,使软件开发者能更专注于软件本身的功能和实现,从而大大缩短软件的开发周期,提高软件的移植性和扩展性。该文介绍了 Eclipse 的插件,扩展点以及插件发现机制,并探讨了如何利用 Eclipse 的可扩展性框架进行 IDE 开发,在此基础上完成了基于 Eclipse 框架的 嵌入式 IDE 的实现。
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。 Eclipse 是 Java 的集成开发环境( IDE ),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++,PHP,和 Ruby 等。 Eclipse 附带了一个标准的插件集,包括Java开发 工具 (Java Development Kit,JDK)。
本文将介绍 eclipse 插件的开发,调试以及打包发布,也可以直接发布到互联网上供其他开发人员在线下载安装, 进行插件开发之前,首先我们来先了解一下 eclipse IDE 的主界面,如下图所示, eclipse 插件开发可以自定义拓展其中每一个板块,包含其界面和功能。 我们常用的一些插件大部份功能集中在顶级菜单栏、右键菜单、 工具 栏、首选项、视图及控制台。接下来我们就开发一个插件,其界面功能为:新增一个顶级菜单,右键菜单,自定义控制台输出日志,新增首选项设置全局参数,自动生成代码的插件。 Error in final launch sequence: Failed to execute MI command: target extended-remote localhost:3333 Error message from debugger back end: localhost:3333: Connection timed out. Failed to execute MI command: target extended-remote localhost:3333 Error message from debugger back end: localhost:3333: Connection timed out. localhost:3333: Connection timed out. 深入理解工具链-自己搭建STM32编程IDE hello_*xyz: PS D:\Work\LedTest_V3> make makefile:1: warning: NUL character seen; rest of line ignored 使用vscode的终端能够make,但是在windos 的powershell中就make不了。这个问题是? 高版本CubeIDE下使用DAP-LINK教程 mailtoxin: 点我昵称进去找发表的文章就可以了,一共也没几篇