[教程]用Eclipse CDT开发Arduino

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插件:


pic1

2012-6-2 13:58 上传
(80.75 KB)

pic1





具体填法如下:


pic2.png

2012-6-2 14:00 上传
(91.97 KB)





其中黑色字体是我修改过的。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的定制版,所以可以按照如下的形式填写:


pic3.png

2012-6-2 14:00 上传
(153.53 KB)





重点在于:

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吧。


pic4.png

2012-6-2 14:00 上传
(64.6 KB)





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


pic5.png

2012-6-2 14:00 上传
(55 KB)





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


pic6.png

2012-6-2 14:00 上传
(35.07 KB)





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



现在我们导入源代码:这个时候我们来导入源代码:

在ArduinoCoreMega2560项目上右键->Import->File System。分两次添加:

第一个是Arduino的核心库源码:一般在Arduino安装路径下的/hardware/arduino/cores/arduino文件夹

还有一个是跟你板子型号相匹配的一个引脚描述头文件,这个要根据你的型号去选择,笔者的Mega2560是在"/hardware/arduino/variants/mega"这里。



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


pic7.png

2012-6-2 14:01 上传
(69.44 KB)





这个时候你可以尝试一下编译(工具栏上面的小锤子)。然后你会发现各种报错各种找不到文件。

这个就是Eclipse CDT比较OOXX的地方,他不会自动把项目自身作为引用文件夹添加进项目里头。所以需要我们自己手动去做。方法如下:



在ArduinoCoreMega2560项目上点击右键-> Properties->C/C++ Build->Settings

这时候有两个地方(两个不同的编译方式,C和C++)添加引用,分别点击下图中的红框(两个完全一样):


pic8.png

2012-6-2 14:01 上传
(134.86 KB)





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


pic9.png

2012-6-2 14:01 上传
(17.48 KB)





其中最后面那个就是指我们的项目,上面的那些就是我们前面在配置AVR的时候让填的那些头文件的引用路径。

这个时候就能进行编译了。如果你在控制台里头看到了类似下面的信息,就说明你编译成功了。


pic10.png

2012-6-2 14:01 上传
(27.41 KB)





编译成功之后会产生一个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文件夹!否则会提示找不到库地址。全都搞定了应该差不多是这个样子:


pic11.png

2012-6-2 14:01 上传
(123.61 KB)





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



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



然后我们打开这个空白的文件,需要往里头写上这些东西:ARDUINO 代码复制打印

#include <Arduino.h>void setup(){}void loop(){}int main(void) {    /* Must call init for arduino to work properly /    init();    setup();    for (;;) {        loop();    } // end for} // end main
#include <Arduino.h>



void setup(){

}



void loop(){

}



int main(void) {

/
Must call init for arduino to work properly */

init();

setup();



for (;;) {

loop();

} // end for

} // end main



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

贴上我的测试代码:ARDUINO 代码复制打印
#include <Arduino.h>int ledPin = 13;void setup(){    pinMode(ledPin,OUTPUT);}void loop(){    digitalWrite(ledPin,HIGH);    delay(100);    digitalWrite(ledPin,LOW);    delay(100);}int main(void) {/* Must call init for arduino to work properly */init();setup();for (;;) {    loop();} // end for} // end main
#include <Arduino.h>

int ledPin = 13;
void setup(){
pinMode(ledPin,OUTPUT);
}

void loop(){
digitalWrite(ledPin,HIGH);
delay(100);
digitalWrite(ledPin,LOW);
delay(100);
}

int main(void) {

/* Must call init for arduino to work properly */
init();
setup();

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

pic12.png

2012-6-2 14:01 上传
(24.02 KB)





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



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


pic13.png

2012-6-2 14:01 上传
(120.38 KB)





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



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



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

via - 极客工坊

标签: Arduino教程