Windows下使用Eclipse开发Arduino程序_mega328p支持windows-程序员宅基地

技术标签: Eclipse  下载  Arduino  AVR  

Arduino IDE功能简单,对于不熟悉编程环境的用户十分容易上手;但是对于大型的Arduino项目开发,如果再使用自带的IDE就会多少显得不便。之前我曾经使用过Eclipse + CDT + avr-gcc开发AVR程序,鉴于Arduino也是基于AVR和avr-gcc的,理论上应该也可以使用Eclipse开发。Google之后发现在Arduino官方网站上就有配置方法的介绍[1],此处自己按照步骤实现了一下,并将要点归纳如下。这里仅针对Windows平台,对于其他平台的用户请在原文中找到对应的配置方法。

1.下载Eclipse IDE for C/C++

下载地址在Eclipse网站:http://www.eclipse.org/downloads/。该下载页面中有很多Eclipse版本,找到并下载C/C++版本:

eclipse-cpp-download

2. 在Eclipse环境中安装AVR插件

打开Eclipse软件,点击菜单 > Help > Install New Software…

在弹出的菜单中的 “Work with:” 处输入插件更新的URL地址: http://avr-eclipse.sourceforge.net/updatesite,点击 “Next>” 按照提示安装即可。

3. 配置avr-gcc开发工具链

配置AVR工具链有两种方法:

1) 直接安装WinAVR-20081205

2)配置工具链选项,使其指向Arduino安装目录下的工具链中

打开Window -> Preferences -> AVR -> Paths,选择“Disable search for system paths at startup”,然后将配置选项设置为以下值:

AVR-GCC “${ARDUINO DIR}\hardware\tools\avr\bin”
GNU make “${ARDUINO DIR}\hardware\tools\avr\utils\bin”
AVR Header files “${ARDUINO DIR}\hardware\tools\avr\avr\include”
AVRDude “${ARDUINO DIR}\hardware\tools\avr\bin”

配置完成后的结果如下:

4. 配置Avrdude

选择菜单 > Project > Properties > AVRDude,在Program Configuration选择项右边选择 “New..” 新建一个下载配置,配置参数设置如下:

Programmer hardware 选择 “Arduino”
Overwrite default port 输入”\\.\” + 端口号,如”\\.\COM6″
Override default baud rate 在${ARDUINO DIR}\hardware\arduino\avr\boards.txt文件中查询

之后还需要设置AVRDude的配置参数。

打开Window -> Preferences -> AVR -> AVRDude,选择“Use custom configuration file for AVRDude”,并将配置文件的路径设置为“${ARDUINO DIR}\hardware\tools\avr\etc\avrdude.conf”

5. 获得Arduino核心库

为了使用Arduino的API,在链接阶段需要有Arduino的核心库文件。有多种方法获得该文件,其中包括自己编译源代码,不过最简单的方法是直接从Arduino IDE的生成文件中获得。具体方法是使用Arduino IDE建立任意一个工程,Arduino会在目录“C:\Users\<username>\AppData\Local\Temp\buildXXXXXXXXXXXX.tmp”中建立临时文件,从对应文件夹中将core.a拷贝出来。因为这个库文件只能用于对应的处理器,所以最好将它重新命名为所使用的Arduino型号,比如libArduinoUNOCore.a。

6. 创建工程与工程配置

在Eclipse中创建一个新的AVR Cross Target Application工程:

Configuration中只选择release工程,点击Next之后选择CPU类型与频率,我这里使用的是UNO,所用的型号为ATmega328p,频率为16MHz。其他型号如Duemilanove使用的也是ATmega328p,而Arduino Mega使用的为ATmega1280,具体的配置情况也可以在board.txt中查询(xxx.build.mcu)。

之后对工程参数进行配置,在工程上点击右键,选择Properties -> C/C++ Build -> Settings,配置方法如下:

Additional Tools in Toolchain - 确认勾选Generate Hex
- 确认勾选Print Size
- 如果想在编译后直接下载,则勾选AVRdude
AVR Compiler -> Directories - 添加AVR Core所在的目录
<arduino>\Arduino\hardware\arduino\avr\cores\arduino
- 添加”pins_arduino.h”所在目录
“<arduino>\hardware\arduino\avr\variants\standard”
AVR Compiler -> Optimization - 设置 Optimization Level 为 Size Optimizations (-Os)
- 设置 “Other Optimization Flags” 为
“-ffunction-sections -fdata-sections”
- 取消”pack structs” 和 “short enums”.
AVR Compiler -> Language Standard - 取消”char is unsigned” 和”bitfields are unsigned”。
AVR C/C++ Linker -> Libraries - 在Library Path中添加之前拷贝的库文件所在目录,必须保证所用的库使用系统的CPU和时钟频率!
- 在Libraries中添加Arduino核心库文件,名称为原文件名去除lib头及.a后缀。比如文件名如果是libArduinoCore.a,此处则设置为ArduinoCore。
- 在Libraries中添加库m,可以保证不必要的麻烦
AVR C/C++ Linker -> General - 设置Other Arguments 为 “-Wl,–gc-sections”

7. 编写程序源文件及编译


在eclipse中新建一个.c源文件,输入以下示例代码:

/*
 * main.c
 *
 *  Created on: 5 Aug 2014
 *      Author: a45
 */

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
 */
#include "arduino.h"

// 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
}

int main(void)
{
    
	init();
	setup();

	while (1)
	{
    
		loop();
	}

	return 0;

}

这里的程序结构和Arduino环境下开发略为不同,用户需要自己编写main函数,并将 loop() 以及 init() 包含进来。之后点击编译按钮进行编译,若编译过程中出现错误,请仔细对照之前的配置表格,确认配置是否一致。我的编译过程输出如下:

14:01:47 **** Build of configuration Release for project arduino ****
make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -I”C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino” -I”C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard” -Wall -Os -ffunction-sections -fdata-sections -ffunction-sections -fdata-sections -std=gnu99 -mmcu=atmega328p -DF_CPU=16000000UL -MMD -MP -MF”main.d” -MT”main.d” -c -o “main.o” “../main.c”
Finished building: ../main.cBuilding target: arduino.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,arduino.map -Wl,–gc-sections -L”F:\EclipseWorksCpp\arduino” -mmcu=atmega328p -o “arduino.elf” ./main.o -lArduinoUNOCore -lm
Finished building target: arduino.elf
Invoking: AVR Create Extended Listing
avr-objdump -h -S arduino.elf >”arduino.lss”
Finished building: arduino.lss
Create Flash image (ihex format)
avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex arduino.elf “arduino.hex”
Finished building: arduino.hex

Create eeprom image (ihex format)

avr-objcopy -j .eeprom –no-change-warnings –change-section-lma .eeprom=0 -O ihex arduino.elf “arduino.eep”

Finished building: arduino.eep

Invoking: Print Size

avr-size –format=avr –mcu=atmega328p arduino.elf

AVR Memory Usage

—————-

Device: atmega328p

Program: 1094 bytes (3.3% Full)

(.text + .data + .bootloader)

Data: 11 bytes (0.5% Full)

(.data + .bss + .noinit)

Finished building: sizedummy

14:01:49 Build Finished (took 1s.509ms)

8. 下载运行

编译成功后,点击工具栏中的AVR图标运行AVRDude进行程序下载。我在下载过程中的命令行输出截取如下:

Launching C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude -pm328p -carduino “-P\\.\COM12″ -b115200 -F -Uflash:w:arduino.hex:a “-CC:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf”
Output:
avrdude: AVR device initialized and ready to accept instructionsReading | ################################################## | 100% 0.00savrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file “arduino.hex”
avrdude: input file arduino.hex auto detected as Intel Hex
avrdude: writing flash (1094 bytes):Writing | ################################################## | 100% 0.18savrdude: 1094 bytes of flash written
avrdude: verifying flash memory against arduino.hex:
avrdude: load data flash data from input file arduino.hex:

avrdude: input file arduino.hex auto detected as Intel Hex

avrdude: input file arduino.hex contains 1094 bytes

avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.14s

avrdude: verifying …

avrdude: 1094 bytes of flash verified

avrdude done. Thank you.

avrdude finished

如果下载成功,将看见板载的LED不断闪烁。

至此Eclipse下Arduino开发的完整配置就完成了,虽然配置过程非常复杂,不过也算一劳永逸。Eclipse对于编辑、着色、函数索引、自动完成都有很好的支持,可以大大提高Arduino项目的开发速度。不过目前也有直接将开发配置以插件形式整合到Eclipse中的项目(http://www.baeyens.it/eclipse/),不过看样子配置起来也十分麻烦,相信不久之后随着Arduino的不断应用,相关的IDE支持也会日渐成熟的。

参考资料

[1] arduino.cc, “Arduino Playground – Eclipse”, http://playground.arduino.cc/code/eclipse

[2] avr-eclipse, “Plugin Download”, http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download

[3] Francesco Rigoni , “Arduino development with Eclipse – A step by step tutorial to the basic setup”, http://horrorcoding.altervista.org/arduino-development-with-eclipse-a-step-by-step-tutorial-to-the-basic-setup/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq515973568/article/details/80947434

智能推荐

Fibonacci Heap实现_fibonacciheap consolidate-程序员宅基地

文章浏览阅读740次。本算法是对<算法导论>相关章节伪代码的实现:先贴代码:#include#include#includeusing namespace std;class FibonacciHeap;class node{ friend class FibonacciHeap; node(int v):key(v),height(0),parent(NULL),left(this),righ_fibonacciheap consolidate

CSS选择器_css选择包含某个类名的节点-程序员宅基地

文章浏览阅读629次。1.简单选择器类选择器 使用时 .类名{样式1;样式2;},匹配对应类名元素 id选择器 使用时 #id{样式1;样式2;},匹配对应id的元素 标签选择器 使用时 标签名{样式1;样式2;},匹配对应标签的元素 通用元素选择器 使用时 *{样式1;样式2;},匹配所有元素 2.属性选择器以下标签名以div为例标签名[name] 所有含有name属性的di..._css选择包含某个类名的节点

ubuntu两个conda安装和切换-程序员宅基地

文章浏览阅读1.5k次。1. 下载anaconda2安装,一路默认,注意添加/home/wang/.bashrc选择yes2. 在/home/wang/envs/py3安装anaconda3,其他同anaconda23. conda create --name xxx27 python=2.7 (我的是myPy27),实际上我的包名是2.7.14版本4. conda create --name xxx36 ..._ubuntu 两个版本conda如何指定一个

计算机网络(自顶向下)第七章总结_移动性代理通告扩展中指出该代理是它所在网络的一个外部代理的字段是-程序员宅基地

文章浏览阅读1.4k次,点赞10次,收藏12次。计算机网络第七章:无线网络和移动网络7.1 概述无线网络要素:无线主机。如同在有线网络中一样,主机是运行应用程序的端系统设备。无线链路。主机通过无线通信链路 (wireless communication link) 连接到一个基站或者另一台无线主机。不同的无线链路技术具有不同的传输速率和能够传输不同的距离。基站。基站在有线网络中没有明确的对应设备。它负责向与之关联的无线主机发送数据和从主机那里接收数据。一台无线主机与某基站“相关联”,则是指①该主机位于该基站的无线通信覆盖范围内。②该主机_移动性代理通告扩展中指出该代理是它所在网络的一个外部代理的字段是

Gradle文件操作基础_gradle ziptree-程序员宅基地

文章浏览阅读1w次。一、定位文件:我们可以使用Project.file()方法来定位一个文件获取File对象(详情参考Project的API),如下://相对路径File configFile = file('src/config.xml')//绝对路径File configFile = file(configFile.absolutePath)//项目路径的文件对象 File config_gradle ziptree

张量分解总览_hooi算法-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏14次。一般一维数组,我们称之为向量(vector),二维数组,我们称之为矩阵(matrix);三维数组以及多位数组,我们称之为张量(tensor)。 在介绍张量分解前,我们先看看矩阵分解相关知识概念。一、基本概念矩阵补全(Matrix Completion)目的是为了估计矩阵中缺失的部分(不可观察的部分),可以看做是用矩阵X近似矩阵M,然后用X中的元素作为矩阵M_hooi算法

随便推点

滥用图片博客做 C&C 配置-程序员宅基地

文章浏览阅读60次。0xCC · 2016/02/03 14:500x00 背景几个月前看到有文章介绍俄罗斯的 Hammertoss 恶意软件,使用 Twitter 作为 C&amp;C 服务。以类似方式滥用 TechNet 的也有过报道【1】。脑洞了一下觉得,使用图片(或者其他格式)作为隐写(steganography)的载体来携带 C&amp;C 控制命令更为隐蔽一些,而且携带的信息容量相对 twitter 的 ..._github c&c

springboot2.0集成activiti6.0-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏6次。 activiti6.0直接使用starter集成到springboot2.0时,会报异常,无法直接进行集成。所以我才用spring-activiti来集成activiti6.0.整体文件结构如下:1.pom文件依赖&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o..._springboot2.0集成activiti6.

国家c语言1级考试题库,国家计算机二级考试 c语言 上机题库100道.docx.docx-程序员宅基地

文章浏览阅读134次。国家计算机二级考试 c语言 上机题库100道.docx1调用fun函数建立班级通讯录,记录学生的编号姓名电话,人数和信息从键盘读入,信息写到myfile5.dat的二进制文件。STYPE FILE fpFun函数先将字符串s中字符按正序存放到t串中,然后把s中字符逆序连到t后. for (i=0;idata t函数fun的功能是:将字符串的字符按逆序输出,但不改变字符串的内容。例,若字符串为..._若传送给m的值为50,则程序输出,7.11.14.21.22.28.33.35.42.44.49,n=11

罗森伯格成功助力安徽省滁州市公安局110指挥中心项目-程序员宅基地

文章浏览阅读183次。安徽省滁州市公安局110指挥中心大楼(含附楼)建筑面积约60000平方米,大楼主要包括指挥中心技术用房、刑侦业务用房、特巡警用房、射击靶场、×××服务大厅、民警训练场、餐厅等,场地景观及附属建筑。建筑主体以办公为主,同时在主体大楼内也规划了公安体系数据中心。 作为整个IT/弱电系统的基础,综合布线系统在此项目中尤其显的重要。通过业主的严密筛...

OS_Sched 函数_os_sched.h-程序员宅基地

文章浏览阅读9.4k次,点赞4次,收藏8次。//任务调度//uCOS-II总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优先级最高,下面该哪个任务运行了的工作是//由调度器(Scheduler)完成的。任务级的调度是由函数OSSched()完成的。中断级的调度是由另一个函数OSIntExt()完//成的Scheduling。//注意:1) 这是一个uCOS-II内部函数,你不能在应用程序中使用它// 2_os_sched.h

物联网开发笔记(46)- 使用Micropython开发ESP32开发板之控制光敏传感器_esp32光敏传感器-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏24次。使用Micropython开发ESP32开发板之控制光敏传感器_esp32光敏传感器

推荐文章

热门文章

相关标签