[教程]用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插件:
2012-6-2 13:58 上传
(80.75 KB)
pic1
具体填法如下:
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的定制版,所以可以按照如下的形式填写:
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吧。
2012-6-2 14:00 上传
(64.6 KB)
下一步之后选择发布设置,把Debug去掉,只需要Release就行了……(你不是真打算用Eclipse对AVR去Debug吧?)
2012-6-2 14:00 上传
(55 KB)
然后下一步,进入到选择设备的页面,MCU Type选择你的设备,笔者的是ATega2560。然后在MCU Frequency填上你的设备的主频,Mega 2560是16000000hz的。(其他设备需要查手册才能查到主频,或者可以看到主板上的晶振,上面写着频率,例如笔者的写着"16.000"单位应该是Mhz)。
2012-6-2 14:00 上传
(35.07 KB)
这样项目就创建好了。系统会创建一个空项目。
现在我们导入源代码:这个时候我们来导入源代码:
在ArduinoCoreMega2560项目上右键->Import->File System。分两次添加:
第一个是Arduino的核心库源码:一般在Arduino安装路径下的/hardware/arduino/cores/arduino文件夹
还有一个是跟你板子型号相匹配的一个引脚描述头文件,这个要根据你的型号去选择,笔者的Mega2560是在"/hardware/arduino/variants/mega"这里。
全都添加之后的项目文件夹大致长这个样子(文件太多,显示不全了):
2012-6-2 14:01 上传
(69.44 KB)
这个时候你可以尝试一下编译(工具栏上面的小锤子)。然后你会发现各种报错各种找不到文件。
这个就是Eclipse CDT比较OOXX的地方,他不会自动把项目自身作为引用文件夹添加进项目里头。所以需要我们自己手动去做。方法如下:
在ArduinoCoreMega2560项目上点击右键-> Properties->C/C++ Build->Settings
这时候有两个地方(两个不同的编译方式,C和C++)添加引用,分别点击下图中的红框(两个完全一样):
2012-6-2 14:01 上传
(134.86 KB)
点击右上角的加号->workspace->选择你的项目(ArduinoCoreMega2560)。这样系统才会在编译的时候去你的项目文件夹下找头文件。添加成功之后我们能在项目Include文件夹中看到这个:
2012-6-2 14:01 上传
(17.48 KB)
其中最后面那个就是指我们的项目,上面的那些就是我们前面在配置AVR的时候让填的那些头文件的引用路径。
这个时候就能进行编译了。如果你在控制台里头看到了类似下面的信息,就说明你编译成功了。
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文件夹!否则会提示找不到库地址。全都搞定了应该差不多是这个样子:
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>然后先点击工具栏上头的编译。编译成功之后点那个写着“AVR”的下载图标。发生错误了:
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
2012-6-2 14:01 上传
(24.02 KB)
这是因为我们没有给这个项目配置下载目标。
在这个项目上点右键->roperties->AVR->AVRDude。在Prorammer选项卡中(一打开就是),有一个Programmer configuration,下拉列表中肯定能找到我们上面配置的mega2560!就像这样:
2012-6-2 14:01 上传
(120.38 KB)
然后点击下载,我们的led开始闪烁了!
教程就是这样,用Eclipse CDT去开发可比ADE方便多了!
根据我的推测,其实外部扩展库就是一堆.cpp和.h,我们可以添加include路径,或者干脆把他们的代码复制过来,然后就能用这些库了!改天再试试其他的面向对象特性。
via - 极客工坊