View
23
Download
0
Category
Preview:
DESCRIPTION
Tutorial para usuarios do Eclipse configurarem para a utilização com o arduino.Este tutorial é para usuários iniciantes.
Citation preview
1
TUTORIAL
INCORPORANDO A BIBLIOTECA DO ARDUINO AO ECLIPSE
Jefferson Z. Moro jefferson.moro@gmail.com
Vinicius Franchini viniciusnf@gmail.com
Campinas, maio de 2011
2
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 Onde baixar? Observaes
Eclipse IDE C/C++ http://www.eclipse.org/downloads/ Escolha o sistema operacional
Arduino IDE http://arduino.cc/en/Main/Software Escolha o sistema operacional
WinAVR http://sourceforge.net/projects/winavr/files/ Somente para Windows
AVR-GCC Vide sua distribuio Somente para Linux
AVR Eclipse plug-in http://sourceforge.net/projects/avr-eclipse/files/
3
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
4
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.
5
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: ..Arduino-
0022hardwarearduinocoresarduino. 10. Selecione todos os arquivos exceto o main.cpp. Clique em Finish.
6
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
7
b. Project Name: Exemplo
c. Project Type: AVR Cross Target Application
d. Toolchains: AVR-GCC Toolchain
e. Clique em Next
f. Marque as opes release e 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 ProjectProperties. 3. Selecione C/C++ Build e expanda a categoria
4. Selecione Settings.
5. Em Configurations, selecione All configurations.
6. 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
8
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
9
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()
10
{
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.
11
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
----------------
12
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)
13
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
Recommended