Beruflich Dokumente
Kultur Dokumente
Jefferson Z. Moro
jefferson.moro@gmail.com
Vinicius Franchini
viniciusnf@gmail.com
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/
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
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
Figura 4
Figura 5
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.
Figura 6
Figura 7
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
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:
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:
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)
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