在最起初的时候,我刚刚接触linux上单片机的开发,最喜欢的就是 eclipse + arm-plug-in + arm-none-eabi 的开发环境,因为这是在Linux上最接近于windows下keil、IAR等IDE的开发方式,然而那是由于对eclipse亦或是makefile等编译过程中的工具的不甚了解,很多时候会遇到一些莫名的错误,也导致了那是觉得这样的环境很鬼畜,现在看来多是一些很浅显的问题,直到最近我再一次的尝试了eclipse开发环境的搭建和使用,我才很顺利的完成了程序的配置。现在也把这个方法推荐给大家,不过在使用这个方式前,还是建议大家先把之前的文章内容看懂了,否则很多时候遇到问题都会不知道怎么解决。
与CubeMX一样,eclipse也是运行在java环境下的,所以我们首先要在环境下安装Java库。方式在上一篇中已经介绍过了,这里就不再做更多阐述了。
还有就是eclipse在显示readme时会自动的加载markdown格式的预览,需要系统安装libwebkitgtk-1.0-0才能使用。
$ sudo apt-get install libwebkitgtk-1.0-0
在eclipse的官网上下载系统eclipse安装包。注意一定下载CDT 版本的就是 Eclipse IDE for C/C++ Developers 版本,这个才是给C/C++语言开发用的版本,里面已经预装好了CDT的插件。
https://www.eclipse.org/downloads/eclipse-packages/
解压后放到自己喜欢的位置就可,我一般会把外部的程序放在用户路径下application的文件夹中。而后实际上我们这时候只要点击解压后文件夹内的eclipse运行程序就能打开了。但是为了在系统菜单中添加一个快捷方式,我们同样的像上一篇中,在 /usr/share/applications/ 的路径下添加一个desktop的文件。
$ sudo gedit /usr/share/applications/eclipse
写入内容,注意执行文件路径和图标路径根据自己的位置修改。
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse Platfrom
Comment=Eclipse IDE
Exec=/home/yangliu/Application/eclipse/eclipse
Icon=/home/yangliu/Application/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Development
然后我们就能在开始菜单中找到eclipse的快捷方式了把它拖到我们左侧的快捷启动栏然后开启吧~。在第一次打开软件后eclipse会要求设置一个工作目录也就是日后我们默认的创建工程的目录,我一般会选择默认的在用户路径下的workspace目录,点击use as default 就会默认了,之后我们再启动就不会需要再点击确定了。
偶尔会我们遇到eclipse卡顿,对操作反应很慢的情况,大家如果碰到了可以参照这位大大的文章修复。
http://blog.csdn.net/u010652906/article/details/51626257
其实按照eclipse的特性来说,我们单纯的使用CDT eclipse + 工具链就可以完成整个工程的编译,但是在那种情况下要设置很多的参数,十分的麻烦。所以在这里我们选择安装一个国外大神制作的arm 开发插件,用插件来配置我们的工程会极大的加快我们初始的工作。
这个插件的项目主页在这里,里面有安装插件的详细介绍,不过我们下下面也会讲到。
http://gnuarmeclipse.github.io/
在下面这个网站中下载插件的zip压缩包,不用解压。
https://github.com/gnuarmeclipse/plug-ins/releases
打开eclipse,点击菜单栏上的help-> Install New Software
点击 add -> archive 选择我们刚刚下载好的插件压缩包,eclipse就会自动读取里面的内容了,在选择框内全选插件的所有内容,然后开始安装。之后就是一些安装过程中的协议确认什么的常见过程没什么好介绍的,等安装完毕后,eclipse会提示重启软件,我们点重启就行。
在我们安装插件完毕后,还需要进行一些设置,来优化我们的eclipse显示和操作,用以适应嵌入式开发,点击 windows -> preference 打开全局设置。然后根据一下官网的说明完成即可。除此之外我默认大家的Ubuntu中已经安装好了arm-none-eabi 的工具链且配置到了系统PATH中,如果没有请参照本系列之前的文章安装。
http://gnuarmeclipse.github.io/eclipse/workspace/preferences/
再配置好我们的eclipse后,我们就要开始正式的开发过程了,这里我推荐大家使用CubeMX来生成工程模板。我们在上一章中已经教大家生成了GNU下使用的stm32工程,也尝试使用了makefile去编译运行它吗,那么我们现在来看看eclipse下怎么编译它吧。
点击新建工程 C project 或 C++ project ,选择一个空工程,toolchain设置为 cross arm gcc。并在project name 的地方给工程起个名字。
之后选择工具链设置其位置,并选择编译配置模板。最后点击finish完成。
在完成设置后,我们会在工作区看到一个空的工程。这是我们在工程上点击右键选择 import ,选择导入文件结构。并在选择中工程文件夹勾选它后点击finish 进行导入操作。
在我们导入后可能会看到很多的报错和警告,我们先不要理会他们,首先我们要做的是把 startup下的 .s 汇编写成的启动文件的改为 .S 因为eclipse默认是识别大写S 为汇编文档的。我们在资源管理器中右键,启动文件 rename 修改即可。
而后我们需要右键资源栏中的工程设置工程参数。
在下面的界面中设置编译参数,然后保存我们就可以编译了,这些参数的设定就相当于我们把makefile 变成了一个图形化的配置界面放了过了,最后eclipse会在工程下创建一个debug目录,并在里面存放自动生成的makefile和编译的中间结果及最终对象。它的实际make目录就是在debug 下进行的。如果编译报错了,大家可以根据这些去看看自己是不是有些参数或路径有问题。只要看看编译过程中的指令输入和后面的参数,再对应设置菜单,我想大家只要看过之前的篇目就会很快理解这些小问题了。
至于一开始的报错,我们在完成设置后,右键工程,选择index -> fresh all files 来让eclipse重建索引目录就可以完成了。
在eclipse下,我可以享受很多keil IAR下没有的开发功能,比如 格式化代码 ,灰色显示未启用的 宏定义区块,快速查找 函数位置等等一系列的方便功能,在windows下也就只有由 eclipse 再开发的 Truestdio 能够与之相比。
其次eclipse也是支持运行用户自己的makefile的,只有在make窗口中新建指令就可以实现。双击即可执行。
在eclipse下开发与我们之前的裸开发方式最大的不同我想也就是在调试过程中了,我们接下来就来为大家介绍eclipse下使用 OpenOCD的调试方式。这里我们同样默认我们已经安装了OpenOCD了。
选择debugconfig 然后在GDB OpenOCD上双击建立一个调试配置。
如下根据自己的板卡设置好参数。
配置好后我们点击debug就可以愉快的开始调试啦~。有图形界面的调试是不是还是挺爽的?哈~。同样的如果这里产生报错我们只要查看一下报错指令很快就能修复。只要我们能够理解eclipse上所有的操作只相当于帮助用户在终端输了一大串的指令,当我们点下一个按钮的时候背后都是一条或多条终端指令的执行。我想对于大家这么久以来跟着我一步一步从命令行开发走过的小伙伴,只要明白这一点,看着eclipse console下的信息解决一些报错和问题想来绝不是难事了。
最近有些忙,近期的几篇文章可能写的有些赶了,讲的不是很详细,如果大家遇到一些问题可以在下面留言,我会尽可能的解答的。同时在最后我也附上个参考的网址,大家可以自己去看看,里面有很多很有一些的东西哦~。比如自动读取RTOS任务序列啦之类的很炫酷又实用的东西,很多我都没有自己去尝试过,也希望大家在试验成功后能够写一篇博客,在评论区告诉我,大家多交流喽~
在eclipse上开发arm :
https://mcuoneclipse.com/
DIY Free Toolchain for Kinetis :
https://mcuoneclipse.com/2013/08/04/diy-free-toolchain-for-kinetis-part-5-freertos-eclipse-kernel-awareness-with-gdb/
openocd 怎样能支持FreeRTOS 8.1.2
http://blog.csdn.net/rickleaf/article/details/41006699
哦对了差点忘了,放上我们配置好的样例工程的链接,大家自己下载下去参考参考吧~。下载后记得要用导入功能加入eclipse哦,否则会遇到一些工程路径设置什么的问题,需要手动修改才能正常编译。
标准的eclipse工程配置:https://github.com/zhengyangliu/Stander_Cross_GCC_STM32F429iDISCO
带有arm插件的工程配置:https://github.com/zhengyangliu/Stander_Cross_ARM_GCC_STM32F429iDISCO