在Arduino上用Java编程 3.通过Eclipse开发Arduino程序

在Arduino上用Java编程

 

1.序

2.TotoroVM使用方法

3.通过Eclipse开发Arduino程序

    Eclipse是广受欢迎的程序开发环境,支持Java,C等多种程序语言,由于他优秀的插件机制和成熟的社区支撑,有着近乎无限的可能性。用惯了Eclipse的语法提示的我,对于Arduino自带的IDE实在是不能适应。通过Eclipse开发Arduino程序,自然也是要通过插件的支持,而这个插件名叫AVR Eclipse Plugin,它不但可以编写,编译Arduino程序,还支持一键烧录的功能。下面,让我们来一步一步搭建一个支持Arduino的Eclipse。

第一步,Eclipse:

    去到Eclipse的官网的下载页面 http://www.eclipse.org/downloads/ 找到最新版的 Eclipse IDE for C/C++ Developper,下载需要的32/64位版本。http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/SR2/eclipse-cpp-juno-SR2-win32.zip

    有了Eclipse IDE for C/C++之后还可以安装一个mingw或者cygwin,两者都有gcc可以编译出windows下的执行文件,区别是mingw编译出来的文件可以直接执行,而cygwin编译出来的文件比较小,但需要有一个cygwin1.dll支持。装他们的目的是为了调试为Arduino写的C++程序(需要自己实现一些调试用的Arduino.h中的方法),以弥补Arduino芯片上难于调试程序的尴尬。

    我使用的的mingw,下载安装包 http://sourceforge.net/projects/mingw/files/latest/download?source=files 安装好后,将\bin目录加到path中,启动Eclipse后会自动实别。然后就可以在新建C/C++项目中选择MinGW GCC,初次使用可以选择 New->C++ Project->Executable->Hello World C++ Project,在Toolchains中选择MinGW GCC,系统会自动生成一个Hello World项目,直接执行即可编译生成Hello World程序。

    上面简单介绍了Eclipse IDE for C++的一般使用方法,接下来进入正题,开始Arduino编译之旅:

第二步,Arduino IDE

    从Arduiono官网 http://arduino.cc/en/Main/Software 上下载Arduino IDE,其中包含了Arduino的编译命令avr-gcc,库文件和硬件配置信息。以供Eclipse直接使用。

第三步,AVR Eclipse Plugin

    下载地址 http://nchc.dl.sourceforge.net/project/avr-eclipse/avr-eclipse%20stable%20release/2.4.0/avreclipse.2.4.0.final.p2repository.zip 。

    Eclipse的插件有多种安装方式,我倾向于把插件安装到Eclipse目录之外,通过link的方式调用。方法为:

    解压插件包到任意目录,如: D:\eclipse_plugins\avreclipse.2.4.0.final.p2repository

    到Eclipse的安装目录下新建一个links目录,在links目录中新建一个任何名称的.link文件,如avreclipse.link,编译这个文件,填入刚才的插件路径:

 

path=D:\\eclipse_plugins\\avreclipse.2.4.0.final.p2repository

    重启Eclipse,如能在Window->Preferences菜单中看到AVR选项即说明插件安装成功。

    配置插件Window->Preferences->AVR->Paths,统统指向Arduino IDE里的目录

    AVR-GCC : \hardware\tools\avr\bin

    GNU-make : \hardware\tools\avr\utils\bin

    AVR Header Files : \hardware\tools\avr\avr\include

    AVRDude : \hardware\tools\avr\bin

    如图:    

在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第1张图片
    配置插件Window->Preferences->AVR->AVRDude

    选择Use custom config file for AVRDude,输入/hardware\tools\avr\etc\avrdude.conf

    在Programmer configuration中添加配置

        - Programmer Hardware选择Arduino

        - Override default port 填写arduino的com口,不知道可以去设备管理器中的Usb serial port上找

        - Override default baudrate填写115200

    如图:
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第2张图片
    配置完成!

第四步,编译静态链接库

    Arduino的一些标准的库需要事先编译,以省得每个新的项目都把这些东西重要编译一遍。

    新建一个C++ AVR静态库项目ArduinoCore:

        - Toolchains : AVR-GCC


在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第3张图片
 

        - Configurations : Release(Arduino没法调试)


在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第4张图片
 

        - MCU Type : ATMega328P (我的Arduino UNO是这个芯片)

        - MCU Frequency : 16000000
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第5张图片
         Finish

    导入静态库通用源码:在ArduinoCore项目上右键->Import->File System

        - From Directory : \hardware\arduino\cores\arduino
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第6张图片
     钩选所有文件,Finish

    导入静态库型号源码:在ArduinoCore项目上右键->Import->File System

        - From Directory : hardware\arduino\variants\standard\pins_arduino.h (Arduino UNO的型号)

    钩选,Finish

    设置编译参数在ArduinoCore项目上右键->Preferences->C/C++ Build->Settings

        - AVR Compiler -> Directories : "${workspace_loc:/${ProjName}}"    (引入ArduinoCore自己)

        - AVR Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections

          * 这两个参数是告诉编译器把程序中的代码段和数据库都分散保存,这样以后编译时就有可能只包含用到的方法和数据,给执行文件减肥

        - AVR C++ Compiler -> Directories : "${workspace_loc:/${ProjName}}"

        - AVR C++ Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第7张图片
    Finish

    编译项目 Project->Build Project。成功后会生成一个静态文件libArduinoCore.a并出现如下信息:
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第8张图片


第五步,编写Arduino程序

    准备就绪,可以编写自己的项目了。

    新建一个C++ AVR应用项目 ArduinoDemo:

        - Toolchains : AVR-GCC

        - Configurations : Release

        - MTU Type : ATMega328P

        - MTU Frequency : 16000000

        Finish

    配置编译参数 

        - AVR Compiler -> Directories : "${workspace_loc:/ArduinoCore}"    (引入ArduinoCore)

        - AVR Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections

        - AVR C++ Compiler -> Directories : "${workspace_loc:/ArduinoCore}"

        - AVR C++ Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections

        - AVR C++ Linker -> General -> Other Arguments -Wl,--gc-sections

        * 配合之前的 -ffunction-sections -fdata-sections,编译时过滤未用到的方法和数据
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第9张图片
 

        - AVR C++ Linker -> Libraries -> Libraries ArduinoCore   (libArduinoCore.a,去除lib和.a)

        - AVR C++ Linker -> Libraries -> Libraries Path "${workspace_loc:/ArduinoCore/Release}"
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第10张图片
     完成,下面可以写程序了,我们以arduino标准的demo程序Blink为例,新建一个新的cpp文件blink.cpp:

 

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
 *复制自arduino示例
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

/* main方法 */
int main(void) {
    /* Must call init for arduino to work properly */
    init();
    setup();

    for (;;) {
        loop();
    }
}

     *arduino代码和c++代码的唯一区别就是arduino会自动生成main方法,依次调用init(), setup()和loop()方法,我们需要自己添加它。

    编译项目 Project->Build Project。成功后会会打印程序的大小,用户需要自行确保程序小于arduino的flash空间大小32K
在Arduino上用Java编程 3.通过Eclipse开发Arduino程序_第11张图片
    烧录程序

    把arduino连接到电脑的USB口

    右键点击项目 Properties->AVR->AVRDude,在Programmer Configuration中选取之前设置过的Arduino,关闭。

    选择菜单AVR->Upload Project to Target Device或者按工具栏上的AVR图标

     

    完工,在Arduino上测试我们的程序吧!

 

 

你可能感兴趣的:(Arduino)