关键字:嵌入式,开源,IDE,Eclipse,ARM,Cortex-M
在嵌入式软件开发过程中,一款合适的集成开发环境(Integrated Development Environment,IDE)能够达到事半功倍的效果。对于初学者来说,选择一款能够根据所选芯片自动实现添加启动文件,设置编译参数,配置连接脚本且对硬件调试器支持友好的IDE,能够将精力集中在应用代码编写与调试上,能够更快的实现功能,看到成果。对于进阶的开发者,不再满足于应用代码的编写与调试,想要去了解嵌入式软件的运行方式,想要根据项目需求进行更高效、更灵活的设置。这时一个开放的,能够进行复杂参数配置的IDE会是一个更好的选择。
除了以学习为目的选择嵌入式软件开发IDE,更多的时候是根据项目需求来选择IDE。在实际的嵌入式开发过程中会使用到多种工具,包括IDE环境、编译工具、软硬件调试工具、操作系统等,根据项目的需求,往往会选择来自不同厂商的工具进行组合。如果能快速有效地将这些不同厂商的工具无缝配合起来,则可以大大提高工作效率。表1基于笔者几年来的使用经验,对Keil® MDK、IAR Embedded Workbench for ARM(以下简称IAR)和CodeWarrior三款常见的嵌入式IDE进行对比。此番对比目的并不是要选出一个最优IDE,而是明确各IDE的优缺点。具体采用哪个IDE需要根据实际情况和项目需求决定。
表1 三种常见嵌入式IDE对比
MDK-ARM有四个可用版本,分别是MDK-Lite(免费评估版)、MDK-Essential、MDK-Plus、MDK-Professional。MDK为笔者首次接触ARM Cortex-M3时选用的IDE,当时版本为v4.x,设置简单,上手容易。在工程管理及代码编辑方面较为不方便。MDK现已到了v5.x版本,与Keil MDK4及之前版本不同,KeilMDK5分成MDK Core和Software Packs两部分。MDK Core主要包含uVision5 IDE集成开发环境和ARMCompiler5。Software Packs则可以在不更换MDK Core的情况下,单独管理(下载、更新、移除)设备支持包和中间件更新包,MDK的可扩展性得到增强。
IAR包含高度优化的IAR ARM C/C++ Compiler,通用的IAR XLINKLinker,项目管理器。IAR编译速度快,生成代码质量高,创建较大工程相对容易。MDK的工程管理和平常用的VC,keil C,PIC等开发环境没有多大的区别,而IAR的工程管理文件,采用了层叠的技术,更容易理清代码的层次,方便工程管理。无论是MDK还是IAR都得到了大多数半导体厂商的支持,我们可以在官方支持库中轻易的找到他们的模板工程。基于模板工程能够轻松创建我们自己想要的工程。
CodeWarrior是飞思卡尔半导体(现恩智浦半导体)基于IBM开源 Eclipse™技术推出的一款全面 嵌入式IDE,提供高度可视化和自动化的框架,支持众多可扩展插件,可加快嵌入式应用的开发速度。在学生时代接触这款IDE,大都跟智能车比赛有千丝万缕的联系。相比于MDK和IAR,CodeWarrior启动速度、编译速度均较慢,对电脑要求较高。SW4和TureSTUDIO等也是基于Eclipse的IDE也有一定使用者。
从表1中能够看出无论是MDK、IAR还是CodeWarrior在实际项目开发中是需要付费购买的。那么有没有免费好用的IDE呢?答案当然是有。除了上文提到的嵌入式IDE,我们也可以采用Eclipse+ GNU ARM Eclipse+ GNU Arm Embedded Toolchain的方式构建自己的开源嵌入式IDE。经过一番努力,我们能够得到什么?
整个基于Eclipse的开源IDE构建过程如图1所示。
图1 基于Eclipse的开源IDE构建过程
1. 安装CDT
关于Eclipse的安装,这里不再赘述,可以选择自己喜欢的版本进行安装,只需要记住安装的版本即可。CDT全称C/C++ DevelopmentTooling,在Ecplise平台上支持c/c++开发的工具插件,支持创建、编辑、资源管理、编译、运行和调试本地C/C++程序。CDT由一组相关插件组成,从功能上可以分为构建支持和调试支持两大类插件。以下的安装步骤都在Windows 7 x64上实现,其他系统过程类似。
安装Eclipse CDT,打开Eclipse,依次点击Help -> Install New Software... -> Work with (Add..)。因为此次安装的Eclipse版本为Kepler(开普勒),所以在Workwith后面填入网址: http://download.eclipse.org/releases/kepler,如图2所示。根据eclipse选择具体版本替换Kepler,这里仅以Kepler版本为例。
图2 Eclipse CDT插件安装
勾选C/C++ Development Tools,点击 "Next",直至安装成功。
2. 安装GNU ARM Eclipse插件
安装GNU ARM Eclipse插件有两种方式:在线安装与离线安装。首先来看在线安装,打开Eclipse,依次点击Help → Install New Software→Add,填入如下信息,如图3所示。
Name: GNU ARMEclipse Plug-ins
Location: http://gnuarmeclipse.sourceforge.net/updates
图3 Eclipse GNU ARM Eclipse插件安装
点击"OK",将出现如图4所示界面,勾选"GNU ARM C/C++ Cross Development Tools",点击“Next”直至安装成功。
图4 Eclipse GNU ARM Eclipse插件在线安装界面
在线安装方式方便,但有时会由于网络原因导致安装失败,我们还可以采用离线安装的方式,点击这里(https://github.com/gnu-mcu-eclipse/eclipse-plugins/releases)下载对应的安装包,打开Eclipse,依次点击Help → Install New Software→Add,选择下载好的离线安装包,一路"Next"直到安装完成,如图5所示
图5 Eclipse GNU ARM Eclipse插件离线安装界面
3. 安装Windows build tool
Linux系统自带make和rm命令,对于windows系统我们需要安装命令行程序,使其支持make和rm命令。点击这里下载安装程序,然后运行安装程序,如图6所示。点击“Next”,直到安装完成。
图6 Windows build tool 安装
4. 安装硬件仿真器驱动
这里我们的硬件仿真器选用Jlink,对应的驱动能够从Jlink官方网站找到,选择合适的路径进行安装即可,建议使用V4.8及以上的版本。在测试的过程中,V4.2对调试的支持不是很好。
5. 安装GNU Tools for ARM Embedded Processors工具链
点击这里,下载该工具链,运行安装程序,选择安装路径,点击“Next”直至最后一步,如图7所示。
图7 GNU Tools for ARM Embedded Processors工具链安装
去掉“Launch gccvar.bat”和“Add path toenvironment variable”前的勾选,并点击“Finish”完成安装。
注意:最好不要在系统环境变量中添加工具链的路径,如果系统中只存在一个工具链,不会产生错误,如果有多个工具链并存,这将导致很多错误带来额外的麻烦。
6. 参数设置
对于已经安装的Windows build tool,GNU Tools forARM Embedded Processors工具链以及Jlink驱动,我们需要检查Eclipse能否检测到它们的安装位置,对于错误的路径我们需要进行更改。
打开Eclipse并依次点击“Windows”->“Preferences”->“C/C++”->“Build”->“Global Tools Paths”,单击“Restore Defaults”,对应的路径将自动填入空位,如图8所示。若与所安装路径不符,请手动更改。
图8 Global Tools Paths 设置
这里是为了方便以后的工程都默认使用该路径,当然也可以分别每个工程设置路径。工具链路径管理。对于一些老的软件,有必要使用当时的工具链来进行编译,以得到相同的结果。工具链的开发者可能一年之内会发布几个版本,因此对于工具链的管理就显得颇为重要了。
7. 建立工程
打开Eclipse,依次点击“File”->“New”->“C Project”,如果是STM32FXXX或者Freescale系列的芯片可以直接选择对应的模板,如果是其他芯片可以安装对应的模板。笔者使用的芯片为STM32F429,于是选择“STM32F4XXC/C++ Project”,并输入工程名字,点击“Next”。
图9 建立Eclipse工程
设置芯片相关参数如图10所示,芯片参数可以从芯片数据手册或者芯片供应商官网获得。这里推荐将Use system calls设置为 Semihosting(POSIX system calls via host)。一直点击“Next”完成工程的创建。
图10 建立工程设置芯片参数
点击“Build”按钮,即可对工程进行自动编译和连接,如图11所示。
图11 编译工程
关于调试,我们需要对Debug的参数做一些设置。在Eclipse中依次点击“Run”->“Debug Configurations…”,双击“GDB SEGGERJ-Link Debugging”会出现一个新的页面,如图12所示。分别检查每页参数与所选芯片保持一致后点击“Debug”按键既可以开始Debug。
图12 Debug参数设置
还有一种更为方便的方法来开启Debug,点击如图13所示向下箭头,选择刚刚我们新建的Debug设置项即可开始Debug。
图13 快速启动Debug
好了,至此我们的基于Eclipse的开源嵌入式IDE已经构建完成,接下来该利用此IDE做一些有意思的开发了。
参考文献
https://developer.arm.com/
http://gnuarmeclipse.sourceforge.net/
https://en.wikipedia.org/wiki/List_of_ARM_Cortex-M_development_tools
https://www.nxp.com/cn/products/software-and-tools/software-development-tools/codewarrior-development-tools:CW_HOME
http://www.st.com/content/st_com/en.html