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作为示例展开介绍,笔者水平有限,无法面面俱到,如果错漏,烦请指出。
2.1
原版Eclipse
2.2
迈来芯MLXIDE
单从界面来看,这几个IDE如出一辙,但这并不难理解,毕竟IDE的功能就是代码编辑和编译调试,Eclipse本身是一个极为优秀的代码编辑器,各家IDE只要套用其代码编辑和插件管理系统,加上配套的工具链就可以做得足够好用。
Eclipse的工程会有各自的工作空间,每个工作空间对应不同的用户配置,工作空间一般在第一次安装IDE打开时选择,实际上,工作空间可以不唯一,用户可以根据自己使用需要,建立多个工作空间管理不同系列的工程。
笔者习惯建立一个主工作空间,以及一个备用工作空间,备用空间用于调试测试代码,主工作空间用于发布正式代码,使用上来说,主空间在管理时需要严谨一些,备用空间则可以随意。
3.1
选择和创建新的工作空间
打开IDE的时候会有以下弹窗,可以根据需要新建工作空间或选择已有工作空间。
3.2
同时打开两个工作空间
再次打开IDE,可以选择不同的空间,此时,配合双屏,可以方便的对比两个工程的代码异同。
3.3
切换工作空间
若电脑硬件资源有限,不允许同时开启多个工作空间时,可以从当前工作空间切出,选择其他工作空间。
3.4
导入工程
Eclipse的工程支持不同工作空间互相导入,导入时,可以选择是否将原工程的所有文件复制到当前工作空间中。
3.5
选择合适的工程代码编码方式
代码本质上是文本文件,文本编码的不同,可能导致代码中文注释成为乱码,通常在建立工程时就应注意工程编码,与项目团队的其他成员统一,避免工程导入到对方电脑出现注释乱码。
GBK编码适用于大部分中文场景,但UTF-8兼容性更好
进入:菜单栏->Preference->Appearance,可以选择自己喜欢的主题,支持自定义背景,默认的选择比较少,只有深色浅色可选。
http://www.eclipsecolorthemes.org/
是一个eclipse主题收集网站,从该网站上下载到的主题,可通过import->General->preference导入IDE使用。
4.5
常用默认快捷键
-
单行注释:"
Ctrl" + "/"
-
多行注释
:"Ctrl" + "Shift" + "/"
-
取消多行注释
: "Ctrl" + "Shift" + "\"
-
代码上移一行
:Alt+
上方向键
-
代码下移一行
:Alt+
下方向键
-
后退:
Alt+
左方向键
-
前进
:Alt+
右方向键
-
快速移动代码:鼠标左键拖动选中代码
-
快速复制代码:按住
Ctrl+
鼠标左键拖动选中代码
-
删除选中行
:"Ctrl" + "D"
-
编译全部
:"Ctrl" + "B"
-
搜索替换
:"Ctrl" + "F"
-
快速减小字体
:"Ctrl" + "-"
-
快速增大字体
: "Ctrl" + "shift" + "+"
-
保存文件
:"Ctrl" + "S"
基于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代码无法定位问题,需要借助编译后的汇编指令,此时,可以借助工程的反汇编文件帮助定位问题。
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的初始化和绑定。
-
初次运行 Git 前的配置
-
生成/添加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:
高版本CubeIDE下使用DAP-LINK教程
mailtoxin: