Sie sind auf Seite 1von 13

TUTORIAL

INCORPORANDO A BIBLIOTECA DO ARDUINO AO ECLIPSE

Jefferson Z. Moro
jefferson.moro@gmail.com

Vinicius Franchini
viniciusnf@gmail.com

Campinas, maio de 2011

Motivao
O Arduino veio para simplificar a programao de microcontroladores. Alm de no precisar
de gravador devido ao bootloader, seu Ambiente de Desenvolvimento Integrado (IDE)
permite o uso de C++, que amplia as possibilidades de projetos. Tal ambiente traz bibliotecas
que facilitam o uso e encurtam o tempo gasto para iniciar um projeto.
Contudo, esse ambiente limitado em ferramentas. Quando o projeto toma grandes
dimenses, o IDE do Arduino deixa de exercer seu propsito facilitador, apesar de suas
bibliotecas ainda serem muito teis. Dessa forma, busca-se o uso de IDEs mais completos,
juntamente com essa poderosa biblioteca.
A primeira opo que vem a cabea usar o IDE da Atmel, o AVR Studio. Todavia, esse
ambiente de desenvolvimento no compila C++, pois as bibliotecas do Arduino no so
suportadas. Outra ideia fazer uso do Eclipse.
O Eclipse um IDE de cdigo aberto (Open Source), feito em Java, que pode ser usado para
o desenvolvimento de muitas linguagens. Ex.: PHP, Java, Python, HTML, C/C++, etc. Ele
foi inicialmente desenvolvida pela IBM, e depois foi doado para uma comunidade software
livre.
Entre as vantagens ferramentais oferecidas pelo Eclipse est a de rodar em vrios sistemas
operacionais e a de facilitar a busca por funes e definies. Ele trata os arquivos
adicionados ao projeto de forma integrada. Assim, basta mandar fazer uma procura e voc
encontrar o quer, independente de em qual arquivo o objeto esteja. Outra vantagem do
programa que seu desenvolvimento todo baseado em plug-ins. Um deles o AVR Eclipse
plug-in.
A ideia essa: usar o IDE Eclipse como ambiente de desenvolvimento e criar uma biblioteca
esttica que armazene todas as funes includas no IDE do Arduino.

Preparando o Software
Primeiramente, faamos o download da ltima verso de cada programa necessrio. Vide a
Tabela 1.
Programa
Eclipse IDE C/C++
Arduino IDE
WinAVR
AVR-GCC
AVR Eclipse plug-in

Onde baixar?
http://www.eclipse.org/downloads/
http://arduino.cc/en/Main/Software
http://sourceforge.net/projects/winavr/files/

Vide sua distribuio

Observaes
Escolha o sistema operacional
Escolha o sistema operacional
Somente para Windows
Somente para Linux

http://sourceforge.net/projects/avr-eclipse/files/

Vamos por partes. Aps baixar o Ecipse, voc deve descompact-lo. No necessrio instal-lo
afinal ele feito em Java, simplesmente execute a aplicao eclipse. Na caixa de dilogos,
escolha o diretrio onde o seu Workspace ficar, marque a opo de usar esse caminho como
padro e clique em OK. Veja a Figura 1.

Figura 1

Na pgina de boas vindas que abrir, escolha a opo Go to the workbench. Observe a Figura 2.

Figura 2

Uma vez baixado o IDE do Arduino, apenas descompacte a pasta, pois s utilizaremos suas
bibliotecas.
O prximo passo ser instalar o WinAVR (para Windows), ou AVR-GCC (para Linux).
Em seguida, instale o AVR-Plugin. Para isso, como o Eclipse fechado, descompacte a pasta
do AVR-Plugin, copie as pastas plugin e features para dentro da pasta do Eclipse (a mesma
onde est o aplicativo). Aparecer uma mensagem perguntando se voc deseja mesclar as
pastas. Marque que sim para todos os itens. Pronto, basta abrir o Eclipse e o plugin ser
carregado junto. Um boto do AVR plugin deve aparecer na barra de ferramentas. Veja a
Figura 3.

Figura 3

Pronto, o IDE Eclipse est pronto para trabalhar com o AVR.

Gerando a Biblioteca
1. Abra o Eclipse e crie um novo projeto C++: New
a. FileNewC++ Project
b. Project Name: Arduino_Lib
c. Project Type: AVR Cross Target Static Library
d. Toolchains: AVR-GCC Toolchain
e. Clique em Next
f. Desmarque a opco de debug.
g. Clique em Next
h. Selecione o MCU type e a frequncia do seu Arduino. Ex.: MCU: Atmega328P,
frequncia: 16000000 Hz.
i. Clique em finish.
2. Clique em Project Properties.
3. Selecione C/C++ Build e expanda esta categoria.
4. Selecione Settings.
4

5. No painel da direita, clique em AVR Compiler:


a. Debugging. Selecione No debugging info.
b. Optimization. Selecione Size Optimizations.

Figura 4

6. No painel da direita, clique em AVR C++ Compiler


a. Debugging. Selecione No debugging info.
b. Optimization. Selecione Size Optimizations.
7. Clique em Ok.
8. Clique com o boto direito do mouse no projeto Arduino_Lib ImportGeneralFile
SystemNext.
9. No dilogo File System, clique em Browse e selecione a pasta onde est a biblioteca do
Arduino. No nosso caso estamos usando a verso 22:
..Arduino0022hardwarearduinocoresarduino.
10. Selecione todos os arquivos exceto o main.cpp. Clique em Finish.

Figura 5

11. Compile o projeto: Project Build Project.

Pronto, voc acaba de gerar uma biblioteca do Arduino para uso no Eclipse. Alguns warnings
(cerca de 12) sero exibidos, mas no se preocupe, tratam-se de avisos de converso de tipo e
alterao de cabealho.
O prximo passo criar um projeto que utilize nossa biblioteca Arduino_Lib.

Configurando um projeto
1. Abra o Eclipse e crie um novo projeto C++:
a. FileNewC++ Project
6

b.
c.
d.
e.
f.
g.
h.

2.
3.
4.
5.
6.

Project Name: Exemplo


Project Type: AVR Cross Target Application
Toolchains: AVR-GCC Toolchain
Clique em Next
Marque as opes release e debug.
Clique em Next
Selecione o MCU type e a frequncia do seu Arduino. Ex.: MCU: Atmega328P,
frequncia: 16000000 Hz.
i. Clique em finish.
Clique em ProjectProperties.
Selecione C/C++ Build e expanda a categoria
Selecione Settings.
Em Configurations, selecione All configurations.
Clique em Additional Tools in Toolchain
a. Marque obrigatoriamente Generate HEX file for flash memory, para gerar o
arquivo .hex
b. Marque Print size, parar exibir no final da compilao, o tamanho do arquivo hex
gerado
c. Marque outros arquivos de sada desejados (opcional)

Figura 6

7. Clique em AVR Compiler:


a. Em Directories, adicione o caminho para a pasta do projeto Arduino_Lib, que
ser montado pelo Eclipse da seguinte forma: "${workspace_loc:/Arduino_Lib}
8. Clique em AVR C++ Compiler:
a. Em Directories, adicione o caminho para a pasta do projeto Arduino_Lib, que
ser montado pelo Eclipse da seguinte forma: "${workspace_loc:/Arduino_Lib}
9. Clique AVR C/C++ Linker
a. Usando C++, o arquivo .hex pode ficar grande. No menu linker, mude o
command para avr-gcc
b. Altere o command line pattern para: ${COMMAND} --cref -s -Os
${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT}
${INPUTS}
-lm
${FLAGS}
10. Ainda em AVR C/C++ Linker, clique em Libraries
a. Selecione no painel da direita Libraries e adicione o nome de nossa biblioteca
para Arduino (Arduino_Lib).
b. Selecione agora Libraries Path e adicione o caminho para libArduino_Lib.a, o
qual est dentro da pasta Arduino_Lib/Release. Ser montado pelo Eclipse da
seguinte forma: "${workspace_loc:/Arduino_Lib/Release}"
c. Clique em Apply.

Figura 7

11. No mesmo menu do passo 5 (Configurations), selecione Release.


12. Clique em AVR Compiler:
a. Debugging. Selecione No debugging info
b. Optimization. Selecione Size Optimizations (-Os).
13. No painel direito, clique em AVR C++ Compiler
a. Debugging. Selecione No debugging info
b. Optimization. Selecione Size Optimizations (-Os).
14. Clique em Ok. A parte de configuraes termina aqui.

Criando um arquivo main.c/cpp


hora de criar nosso arquivo principal (main.c ou main.cpp). O compilador Avr-gcc compila
tanto arquivos .c, quanto .cpp. Como projetos em C++ podem incorporar arquivos em C,
optamos por utilizar C++.
1. Clique com o boto direito do mouse na pasta do projeto Exemplo New Source
File.
2. Em source file, coloque o nome main.cpp.
3. Clique em Finish.
4. Abra o arquivo main.cpp e copie o cdigo de exemplo abaixo:
#include "WProgram.h"
/* Escolhe pino do LED do Arduino */
const int PINO_LED = 13;
/* Configura PINO_LED como sendo de sada */
void configPinagem ()
{
pinMode(PINO_LED, OUTPUT);
}
int main(void)
{
init(); // inicializa a biblioteca do Arduino
configPinagem(); //
for (;;) {
digitalWrite(PINO_LED, HIGH);
delay(200);
digitalWrite(PINO_LED, LOW);
delay(1000);
}
}

5. Como estamos utilizando C++, necessrio colocar o seguinte trecho de cdigo abaixo:
extern "C" void __cxa_pure_virtual()

{
cli();
for (;;);
}

Isto necessrio apenas em C++ pois, quando uma funo puramente virtual criada,
necessrio um manipulador para erros para quando tal funo chamada. Quando existem
funes virtuais em uma aplicao, necessrio que o programador fornea seu prprio
manipulador de erros __cxa_pure_virtual(). isso que feito !
6. Para compilar o cdigo, basta clicar na setinha ao lado do martelo, na barra de
ferramentas superior no Eclipse, e selecionar Release. O cdigo deve compilar sem erros.

Figura 8

Utilizando o modo de depurao


Uma das diferenas mais significativas entre o modo de depurao (Debug) e o modo de
lanamento (Release) que, em debug a informao de depurao simblica emitida para
ajudar na busca de erros na aplicao, enquanto a otimizao do cdigo no levada em conta.

10

Por outro lado, em uma Release, a informao de depurao simblica no emitida, mas h
uma otimizao do cdigo. Consequentemente, por esses dois motivos, o tamanho do arquivo
gerado menor que no modo Debug.
Entretanto, erros curiosos podem aparecer quando se utiliza o modo Release, pois otimizaes do
compilador ou diferenas na inicializao de variveis podem levar a execues no esperadas
do cdigo. Como exemplo, basta citar que quando uma varivel global criada e seu valor
alterado somente na rotina de interrupo e a otimizao est ativada, a varivel pode ser
compilada como constante pelo AVR-GCC. Sendo assim, sua declarao deve ser precedida de
volatile para que ela no sofra otimizao e isso no ocorra.
Para configurar o modo de depurao, faa o seguinte:
1. Siga todos os passos da parte 3-Configurando um projeto, at (inclusive) o passo 10.
2. No mesmo menu do passo 5 (Configurations), selecione Debug.
3. Clique em AVR Compiler:
a. Debugging. Selecione Standard debugging info (-g2)
b. Optimization. Selecione No Optimizations (-O0).
4. Clique em AVR C++ Compiler
a. Debugging. Selecione Standard debugging info (-g2)
b. Optimization. Selecione No Optimizations (-O0).
5. Clique em Ok. A parte de configuraes para depurao termina aqui.
Agora voc poder escolher entre dois modos de compilao: Debug e Release. Para isso, basta
selecionar o modo na seta ao lado do martelo na barra de ferramentas do Eclipse.
Como demonstrao que modo release pode gerar cdigos mais otimizados, tomemos como
exemplo o projeto que acabamos de criar nesse tutorial. Se o projeto for compilado no modo
release, as informaes exibidas no console sero:
AVR Memory Usage
---------------Device: atmega328p
Program:
1132 bytes (3.5% Full)
(.text + .data + .bootloader)
Data:

9 bytes (0.4% Full)

(.data + .bss + .noinit)

Por outro lado, no modo debug, ter-se-:


AVR Memory Usage
----------------

11

Device: atmega328p
Program:
1160 bytes (3.5% Full)
(.text + .data + .bootloader)
Data:
9 bytes (0.4% Full)
(.data + .bss + .noinit)

Veja que at mesmo para um pequeno projeto, existe uma diferena de 28 bytes entre os
arquivos gerados pelos dois modos!

Otimizando o projeto
possvel otimizar ainda mais nosso projeto. Para tanto algumas configuraes extras devem ser
adicionadas.
Faa as configuraes abaixo para Arduino_Lib:
1. Clique em ProjectProprietsC/C++ BuildSettings
2. Em Configuration escolha Release
3. Clique em AVR Compiler:
a. Optimization Other Optimization flags. Escreva a seguinte linha de comando:
-ffunction-sections -fdata-sections
4. Clique em AVR C++ Compiler:
a. Optimization Other Optimization flags. Escreva a seguinte linha de comando:
-ffunction-sections -fdata-sections
5. Clique em Ok.
Compile o projeto Arduino_Lib. Repita os 5 passos acima para o projeto Exemplo.
Em seguida, faa tambm as seguintes alteraes em Exemplo:
1. Clique em ProjectProprietsC/C++ BuildSettings
2. Em Configuration escolha Release
3. Clique em AVR C++ LinkerGeneral:
a. Other Arguments. Escreva a seguinte linha de comando: -Wl,--gc-sections
4. Clique em Ok e compile o projeto no modo Release.
Uuuaaal!! Como pode-se observar abaixo, no modo release otimizado, um ganho de 176 bytes
conseguido em relao ao modo debug e um ganho de 148 bytes em relao ao modo release.
AVR Memory Usage
---------------Device: atmega328p
Program:
984 bytes (3.0% Full)
(.text + .data + .bootloader)

12

Data:

9 bytes (0.4% Full)


(.data + .bss + .noinit)

Outra observao relevante que, usando o IDE do Arduino e compilando o mesmo exemplo
(Exemplo), obteve-se o seguinte resultado:
Binary sketch size: 1024 bytes (of a 30720 byte maximum)

Ou seja, o projeto no Eclipse teve um ganho de 40 bytes.

Referncias
http://haacked.com/archive/2004/02/14/difference-between-debug-vs-release-build.aspx
http://zanona.com.br/blog/archives/30
http://www.devmedia.com.br/post-11512-Instalando-o-Eclipse-+-Java-Development-Kit-Parte-1.html
http://www.jimschrempp.com/features/computer/arduino_notes_eclipse.htm
http://www.codeproject.com/KB/system/Arduino_Unleashed.aspx
http://itpedia.nyu.edu/wiki/Arduino_in_Eclipse

13

Das könnte Ihnen auch gefallen