极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 62620|回复: 19

[教程]用Eclipse CDT开发Arduino

[复制链接]
发表于 2012-6-2 14:03:07 | 显示全部楼层 |阅读模式
本帖最后由 friskit 于 2012-6-2 14:55 编辑

【原创教程,转载请注明出处】
【教程从我的博客上般来的,如果图片有效果不好的地方,还是直接点这里看原文吧:用Eclipse CDT开发Arduino
【这。。这竟然是我在Geek Workshop的处女贴— —。。】
好了开始正文:
------------------------------
一直再用Arduino的ADE进行开发。。不过表示对这个开发环境非常无语!

它不支持中文,没有代码提示,经常出现莫名其妙的错误,代码缩进混乱,TAB竟然是用两个空格拼起来的!!

以前一直做Java开发,觉得Eclipse是一个很强大的软件,而且可以通过CDT支持C/CPP的开发。

在网上查阅了一些资料,费尽周折,最后终于折腾好了……决定把这个安装过程发出来给大家参考一下:

(本教程综合了多篇文章,尤其是这篇非常详细的文章:《Eclipse helios 上编写arduino程序并进行烧录》 帮助很大,非常感谢)



第一步:环境准备:

我们需要Eclipse+CDT,AVR Eclipse插件(http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download),还有AVR库(这个Arduino安装路径下自带)

笔者所用各软件的版本是:

OS:Mac OS X 10.7.4 AVR Eclipse Plugin:2.4 Arduino ADE:1.0.1

第二步:AVR 插件设置:

当我们把所有的程序都装好之后,需要配置AVR插件:



具体填法如下:



其中黑色字体是我修改过的。Mac下Eclipse没法把目录设定到.app文件里头,所以Mac用户可能需要把手动把路径插入到设置里头。Windows版应该没这个问题。

路径配置完毕之后,我们切换回到AVRDude的那个树形菜单,进行配置。

首先选择Use custom configuration file for AVRDude,然后在下面找到Arduino内自带的设置文件,一般目录在:Arduino/hardware/tools/avr/etc/avrdude.conf

然后,在下面Programmer configurations的表格内应该是空的。所以我们点击右边的Add..

由于笔者所用平台是一款Arduino Mega 2560的定制版,所以可以按照如下的形式填写:



重点在于:
1: Programmer Hardware (Mega 2560是 Atmel STK500 Version 2.x firmware)
2: Override default port (-p): 笔者的mac下是/dev/xxxx。windows一般是comx,具体端口号可以在ADE中看到。
其他可以不用动,然后点击OK就可以了。

第三步:编译ArduinoCore

前几天分析了一下ADE大致的工作原理。在你写好代码之后,ADE会自动编译核心库core.a文件。然后编译你的程序,再把你的程序跟核心库链接起来,然后变成二进制文件下载到Arduino设备上执行。

当然,你也可以不用静态链接库,代价就是你要把core文件夹添加进include中,然后系统在每次编译的时候,都会花上十来秒钟的时间帮你把静态库中用到的东西编译一下。

但是对于这种几百年不会变的静态库来说,咱还是自己编译一下的好。

注:不同Arduino平台下的核心库所需要的源文件不太一样,我在下面会注明(笔者所用的是Arduino Mega2560):

首先我们要创建一个AVR交叉编译静态库项目:点击File-New-C++ Project。

然后在里面选择“AVR Cross Target Static Library”,我们这里就叫做ArduinoCoreMega2560吧。



下一步之后选择发布设置,把Debug去掉,只需要Release就行了……(你不是真打算用Eclipse对AVR去Debug吧?)



然后下一步,进入到选择设备的页面,MCU Type选择你的设备,笔者的是ATega2560。然后在MCU Frequency填上你的设备的主频,Mega 2560是16000000hz的。(其他设备需要查手册才能查到主频,或者可以看到主板上的晶振,上面写着频率,例如笔者的写着"16.000"单位应该是Mhz)。



这样项目就创建好了。系统会创建一个空项目。

现在我们导入源代码:这个时候我们来导入源代码:
在ArduinoCoreMega2560项目上右键->Import->File System。分两次添加:
第一个是Arduino的核心库源码:一般在Arduino安装路径下的/hardware/arduino/cores/arduino文件夹
还有一个是跟你板子型号相匹配的一个引脚描述头文件,这个要根据你的型号去选择,笔者的Mega2560是在"/hardware/arduino/variants/mega"这里。

全都添加之后的项目文件夹大致长这个样子(文件太多,显示不全了):



这个时候你可以尝试一下编译(工具栏上面的小锤子)。然后你会发现各种报错各种找不到文件。
这个就是Eclipse CDT比较OOXX的地方,他不会自动把项目自身作为引用文件夹添加进项目里头。所以需要我们自己手动去做。方法如下:

在ArduinoCoreMega2560项目上点击右键-> Properties->C/C++ Build->Settings
这时候有两个地方(两个不同的编译方式,C和C++)添加引用,分别点击下图中的红框(两个完全一样):



点击右上角的加号->workspace->选择你的项目(ArduinoCoreMega2560)。这样系统才会在编译的时候去你的项目文件夹下找头文件。添加成功之后我们能在项目Include文件夹中看到这个:



其中最后面那个就是指我们的项目,上面的那些就是我们前面在配置AVR的时候让填的那些头文件的引用路径。
这个时候就能进行编译了。如果你在控制台里头看到了类似下面的信息,就说明你编译成功了。



编译成功之后会产生一个libArduinoCoreMega2560.a的文件,这个就是我们需要的静态库。

注意:这个ArduinoCoreMega2560的项目就不要再动了!千万不要删除。在后面的项目可以直接include这个项目,不用你再去费事儿地翻Arduino的安装路径了。

第四步,创建项目!

前面废了这么多事儿就是为了用起来方便一些。

首先新建一个项目:File->New->C++ Project->AVR Cross Target Application->Empty Project。
名字就姑且叫做ArduinoDemo吧。

然后还是像刚才那样,下一步把Debug去掉,下一步,选择设备和频率,完成。

然后下一步我们要添加一些引用。但是这回引用路径就不需要再去翻Arduino的安装目录了。可以直接导入我们的ArduinoCoreMega2560。具体方法如下:

还是像上面说过的那样(不记得的话去网上看那个带红框的图),分别添加路径:这回路径选择workspace,然后把ArduinoCoreMega2560的项目添加进去。这样的话编译所需要的头文件就添加完了。

然后我们要添加静态库文件,选择Properties->C/C++ Build->Settings->AVR C++ Linker->Libraries。在上面那栏选择要添加的库文件名:ArduinoCoreMega2560,然后在下面那栏添加这个库所在的地方:workspace->ArduinoCoreMega2560->Release文件夹。一定要选上Release文件夹!否则会提示找不到库地址。全都搞定了应该差不多是这个样子:



这个时候我们可以创建源码了!

在ArduinoCore项目上右键->New->File 这里就叫做main.cpp吧

然后我们打开这个空白的文件,需要往里头写上这些东西:
  1. #include <Arduino.h>

  2. void setup(){
  3. }

  4. void loop(){
  5. }

  6. int main(void) {
  7.         /* Must call init for arduino to work properly */
  8.         init();
  9.         setup();
  10.        
  11.         for (;;) {
  12.                 loop();
  13.         } // end for
  14. } // end main


复制代码


main函数中的内容就不要动了,然后就能看到我们熟悉的setup和loop函数。现在你可以在这个框架之中写代码了!

贴上我的测试代码:
  1. #include <Arduino.h>

  2. int ledPin = 13;
  3. void setup(){
  4.         pinMode(ledPin,OUTPUT);
  5. }

  6. void loop(){
  7.         digitalWrite(ledPin,HIGH);
  8.         delay(100);
  9.         digitalWrite(ledPin,LOW);
  10.         delay(100);
  11. }

  12. int main(void) {

  13.   /* Must call init for arduino to work properly */
  14.   init();
  15.   setup();

  16.   for (;;) {
  17.           loop();
  18.   } // end for
  19. } // end main
复制代码
然后先点击工具栏上头的编译。编译成功之后点那个写着“AVR”的下载图标。发生错误了:



这是因为我们没有给这个项目配置下载目标。

在这个项目上点右键->roperties->AVR->AVRDude。在Prorammer选项卡中(一打开就是),有一个Programmer configuration,下拉列表中肯定能找到我们上面配置的mega2560!就像这样:



然后点击下载,我们的led开始闪烁了!

教程就是这样,用Eclipse CDT去开发可比ADE方便多了!

根据我的推测,其实外部扩展库就是一堆.cpp和.h,我们可以添加include路径,或者干脆把他们的代码复制过来,然后就能用这些库了!改天再试试其他的面向对象特性。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-6-2 14:08:49 | 显示全部楼层
看得我头都痛了,其实简单原始的IDE挺好~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-2 14:18:10 | 显示全部楼层
飞翔的红猪 发表于 2012-6-2 14:08
看得我头都痛了,其实简单原始的IDE挺好~~

配置好了之后就方便了~主要是Eclipse用的熟。。代码提示神马的做的比ADE强多了……尤其不能忍受ADE竟然用两个空格代替了TAB……
回复 支持 反对

使用道具 举报

发表于 2012-6-2 14:30:29 | 显示全部楼层
并不是ADE才用空格代替TAB,其实很多有名的编程软件也这样的,只不过有些是可以选择的
回复 支持 反对

使用道具 举报

发表于 2012-6-2 14:34:24 | 显示全部楼层
{:soso_e103:}貌似是MAC环境下的。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-2 14:51:10 | 显示全部楼层
弘毅 发表于 2012-6-2 14:34
貌似是MAC环境下的。。。。

windows也能用……就是把里头相应的一些名字换掉就好— —。。。
回复 支持 反对

使用道具 举报

发表于 2012-6-2 23:26:18 | 显示全部楼层
不错的帖子,但是我也发现用IDE的会相对于方便点了!希望你继续斗鼓这个的系列实验!
回复 支持 反对

使用道具 举报

发表于 2012-6-3 12:39:51 | 显示全部楼层
很好的帖子。很详细的教程,感谢LZ!

Arduino原有的IDE太难用了。不过我现在用的是VS08 + VisualMicro + VisualAssitant,除了不能跟踪调试之外,其他方面无敌了...

不过VisualMicro确实有点诡异,要成功安装不是太容易。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-4 21:53:55 | 显示全部楼层
SS15 发表于 2012-6-3 12:39
很好的帖子。很详细的教程,感谢LZ!

Arduino原有的IDE太难用了。不过我现在用的是VS08 + VisualMicro + ...

求教程。。。过两天有个。net地arduino项目要开发。。。。要从mac迁移到vcs了。。。
回复 支持 反对

使用道具 举报

发表于 2012-6-4 22:01:22 | 显示全部楼层
friskit 发表于 2012-6-4 21:53
求教程。。。过两天有个。net地arduino项目要开发。。。。要从mac迁移到vcs了。。。

这个帖子。。。用VS编译下载arduino程序
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=321
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-5 09:20:00 | 显示全部楼层
弘毅 发表于 2012-6-4 22:01
这个帖子。。。用VS编译下载arduino程序
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=3 ...

感谢老大!
回复 支持 反对

使用道具 举报

发表于 2012-10-6 02:01:18 | 显示全部楼层
测试了VS2010开发环境,虽然我一直用VS的C#写程序...

感觉还是Eclipse开发环境好用些,可能是VM目前还不太完善吧...

回复 支持 反对

使用道具 举报

发表于 2012-10-6 20:29:57 | 显示全部楼层
本帖最后由 johnsonzzd 于 2012-10-6 20:39 编辑

可以再安装一个串口监控插件,rxtx。在eclipse里直接开个窗口连接串口。

http://mihirknows.blogspot.com/2 ... rom-eclipse_28.html
回复 支持 反对

使用道具 举报

发表于 2012-10-6 20:56:31 | 显示全部楼层
其实不用这么麻烦,eclipse有arduino插件。可以参考
http://arduino.cn/thread-2092-1-1.html
回复 支持 反对

使用道具 举报

发表于 2012-10-22 07:49:22 | 显示全部楼层
强帖要顶,原理的IDE很弱智,多写写这方面的文章,学习学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 10:01 , Processed in 0.048352 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表