Preparando o Eclipse para microcontroladores AVR - Embarcados
Pedro Igor Borçatti
Este é o primeiro artigo de uma série que tem como objetivo abordar de maneira prática a programação em C/C++ para Microcontroladores AVR. Utilizarei um Arduino Uno com um ATMEGA328P-PU e um Shield EDU-IFSP. Confira aqui como preparar a IDE do Eclipse como plataforma de desenvolvimento para microcontroladores AVR.
Este post faz parte da série Programação em C/C++ para Microcontroladores AVR. Leia também os outros posts da série:
Lendo e Escrevendo nos pinos do Arduino com linguagem C/C++
Este é o primeiro artigo de uma série que tem como objetivo abordar de maneira prática a programação em C/C++ para Microcontroladores AVR. Nesses artigos utilizarei um Arduino Uno dotado de um ATMEGA328P-PU e um Shield EDU-IFSP para realizar certas atividades, onde apresentarei diversos periféricos do microcontrolador.
Neste artigo vamos preparar a IDE do Eclipse como plataforma de desenvolvimento para microcontroladores AVR, e as configurações vistas aqui serão utilizadas em artigos posteriores.
Plataforma Arduino e Linguagem Arduino
O Arduino é uma plataforma de código aberto baseada em um hardware e software, que tem como principal objetivo facilitar o seu uso. Ela diminui consideravelmente a curva de aprendizado, facilita prototipagem e reduz o tempo de desenvolvimento de um projeto. Mas o que devemos ter em mente é que não estamos programando um Arduino e sim um microcontrolador. E apesar da semelhança, não estamos programando em C, e sim na linguagem Arduino.
A simplicidade na programação Arduino é evidente quando comparada com o C, porém ela é aproximadamente 6 vezes maior, além de usar memória dinâmica sem nem mesmo declarar uma variável. Isso ocorre porque o ambiente de desenvolvimento integrado (IDE) traduz a programação Arduino (baseada em Wiring) para C/C++, gerando lixo no processo. Isso nos impede de criar códigos otimizados e de utilizar recursos que o hardware do microcontrolador pode fornecer, não tendo total controle sobre eles.
Figura 1 – Comparação entre linguagem C/C++ e linguagem Arduino.
Figura 2 – Compilação da programação C.
Figura 3 – Compilação da programação Arduino
No exemplo acima, a programação Arduino ficou com 928 bytes de programa e 9 bytes de memória dinâmica, já em C o programa ficou com apenas 178 bytes de programa e não ocupa nenhuma memória dinâmica. Essa comparação foi feita entre dois códigos equivalentes. Um deles é o exemplo oficial da Arduino®, o blink (porém sem comentários), que pode ser encontrado em: "Arquivos/Exemplos/Básico/Blink". Foi utilizada a versão 1.8.5 da IDE Arduino®.
Apesar de ser desenvolvido em java, a IDE Arduino utiliza o avrdude e o avr-gcc para realizar a tradução do código C/C++ em linguagem de máquina, o que possibilita programarmos diretamente em C na IDE. Entretanto, podemos utilizar o AVR Studio ou até mesmo o Eclipse. Neste artigo irei utilizar o Eclipse Oxygen.
Primeiro temos que baixar e instalar o Eclipse. Aconselho utilizar a versão estável mais recente ou a mesma utilizada neste artigo. Eu estou utilizando a distribuição Linux Fedora workstation 27 com interface gnome shell, mas esse processo funciona com outras distribuições, como o Ubuntu.
Utilize o comando uname -a para saber a arquitetura do sistema ou busque por "detalhes" nas configurações, em seguida baixe o Eclipse IDE for C/C++ Developers de acordo com a arquitetura do seu computador:
[Doctor@who ~]$ uname -a Linux who 4.15.8-300.fc27.x86_64 #1 SMP Fri Mar 9 18:11:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[Doctor@who ~]$ uname -a
Linux who 4.15.8-300.fc27.x86_64 #1 SMP Fri Mar 9 18:11:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Mova o arquivo tar.gz para o diretório /opt e use o comando tar -xvf para extrai-lo. O arquivo compactado não é mais necessário, então podemos removê-lo:
$ cd /opt/ $ sudo tar -xvf ~/Downloads/eclipse-cpp-oxygen-3-rc3-linux-gtk-x86_64.tar.gz /opt/ $ sudo rm eclipse-cpp-oxygen-3-rc3-linux-gtk-x86_64.tar.gz $ cd eclipse
$ sudo tar -xvf ~/Downloads/eclipse-cpp-oxygen-3-rc3-linux-gtk-x86_64.tar.gz /opt/
$ sudo rm eclipse-cpp-oxygen-3-rc3-linux-gtk-x86_64.tar.gz
O próximo passo é adicionar o lançador do programa na interface gráfica, que consiste num arquivo de texto padronizado que se localiza em /usr/share/applications/. Vamos criá-lo utilizando o editor nano com o nome "eclipse.desktop". Fique atento com as localizações e nomes dos arquivos relacionados ao atalho, caso tenha mudado o diretório do Eclipse mude também as linhas Exec e Icon de acordo com a localização escolhida. Verifique também se os nomes do ícone e o executável. Caso necessário, mude-os.
$ sudo nano /usr/share/applications/eclipse.desktop [Desktop Entry] Version=1.0 Name=eclipse Comment=IDE de programação eclipce Exec=/opt/eclipse/eclipse # localização do arquivo do ícone Icon=/opt/eclipse/icon.xpm # localização do arquivo executável Type=Application Categories=Application
Comment=IDE de programação eclipce
Exec=/opt/eclipse/eclipse # localização do arquivo do ícone
Icon=/opt/eclipse/icon.xpm # localização do arquivo executável
Agora só nos resta dar a permissão adequada ao arquivo executável do Eclipse. É muito importante nunca dar acesso total usando o chmod 777, isso deixa seu sistema vulnerável. O chmod +x é suficiente para isso, você pode executar o eclipse com o comando ./eclipse &:
$ sudo chmod +x /opt/eclipse/eclipse $ cd /opt/eclipse/ $ ./eclipse &
$ cd /opt/eclipse/
Pesquise por Eclipse no lançador do seu Linux como mostra a figura 4. Se tudo estiver certo, irá aparecer com o ícone e nome de quando criamos o atalho e irá abrir normalmente.
Figura 4 – Eclipse instalado no gnome shell.
Temos que instalar os plugins adequados e alguns programas necessários para que o eclipse possa compilar e gravar os códigos que vamos fazer. No Eclipse, vá para o menu Help > Install New Software:
Figura 5 – Instalar novo Software.
No campo work with insira o link http://download.eclipse.org/tools/cdt/releases/galileo e clique em add. Selecione tudo e dê next até o final. Logo após a instalação, o Eclipse irá reiniciar.
Figura 6 – Instalar plugin CDT.
Repita o processo para instalar o plugin do arv com o link http://avr-eclipse.sourceforge.net/updatesite/:
Figura 7 – Instalar plugin avr-eclipse.
Após o Eclipse reiniciar novamente, vamos instalar os pacotes de compilação e gravação no Linux:
sudo dnf install avrdude binutils-avr gcc-avr avr-libc gdb-avr
ou para distribuições baseadas em Debian:
Por fim temos que configurar o gravador e nesse ponto o processo será o mesmo para qualquer sistema operacional. Conforme as figuras 8 e 9, vá no menu Window/Preferences, procure por AVR/AVRDude e clique em add…
Figura 8 – Preferência da IDE.
Figura 9 – Preferência do gravador avr.
Insira as configurações adequadas nos campos Programmer Hardware com "Arduino" e em Override default baudrate com 115200. No campo Override default port insira /dev/ttyACM0, porém isso pode mudar de acordo com a distribuição ou sistema operacional. Por exemplo, no Windows seria COM5. Para descobrir o valor deste campo, basta ir na IDE do Arduino em ferramentas/portas.
Figura 10 – Configurando o gravador AVR.
Para criar o projeto vá na home da aba Welcome e clique em Create a new C++ project:
Figura 11 – Home da página Welcome do eclipse.
Na Janela que abrir, selecione AVR-CGG Toolchain em AVR Cross Target Application:
Figura 12 – Home da página Welcome do eclipse.
Não iremos utilizar a ferramenta de Debug, então mantenha selecionada apenas a opção Release:
Figura 13 – Modo de compilação.
Selecionamos o microcontrolador utilizado e sua frequência de trabalho. Então coloque ATmega328P com 16000000, que corresponde às configurações do Arduino Uno:
Figura 14 – MCU e frequência de trabalho.
No diretório criado clique com o botão direito e vá em New Source File para criar o arquivo onde iremos programar:
Figura 15 – Criando arquivo.
No caso, em C++ é importante ter um arquivo chamado "main.cpp", que é onde vamos colocar a função principal do programa:
Figura 16 – Criando arquivo.
Agora com o botão direito vá em Properties para definir o gravador que vamos utilizar. Na Janela que abrir vá para AVR/AVRDude e no campo Programmer Configuration coloque as configurações que criamos anteriormente:
Figura 17 – Propriedades do projeto.
Figura 18 – Selecionar gravador.
O Eclipse é uma plataforma de código aberto que teve início pela IBM em 2001, no entanto ela se torna em uma fundação sem fins lucrativos (Eclipse Foundation) em 2004, onde atua na administração e organização da comunidade que mantém o projeto. O fato do Eclipse ter este formato o torna muito completo, com muitos recursos que podem ajudar na produtividade e desenvolvimento de diversos projetos. Como exemplo podemos programar microcontroladores, sendo que não estamos limitados apenas nos microcontroladores AVR.
Neste artigo preparamos nosso ambiente para trabalhar com o microcontrolador do Arduino Uno. No próximo artigo veremos como gravar o microcontrolador, além de algumas de suas características. Em outras palavras, vamos por a mão na massa.
ARDUINO. What is Arduino?. Disponível em: <https://www.arduino.cc/en/Guide/Introduction>. Acesso em: 22 jan. 2017.
ATMEL. ATmega328/P: ATmega328/P, DATASHEET COMPLETE. 2016. Disponível em: <http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf>. Acesso em: 22 jan. 2017.
AVELINO. Como programar para AVRs em C/C++? E utilizando o Arduino? 2015. Disponível em: <http://pt.stackoverflow.com/questions/64731/como-programar-para-avrs-em-c-c-e-utilizando-o-arduino>. Acesso em: 21 jan. 2017.
LIMA, Chaerles Borges. Vilaça, Marco V. M. AVR e Arduino Técnicas de Projeto. 2º edição. Florianópolis 2012, edição dos Autores.
LIMA, Chaerles Borges. Programação C para Arduino. 2013. Disponível em: <http://pt.slideshare.net/rodrigorosa395/programao-em-c-para-arduino>. Acesso em: 21 jan. 2017.
LIMA, Charles Borges. OS PODEROSOS µCONTROLADORES AVR. 2009. Instituto Federal de Educação, Ciência e Tecnologia de Santa Catarina, Florianópolis. Disponível em: <http://digoreis.net/temp/Apostilas/APOSTILA_ATMEGA8.pdf>. Acesso em: 21 jan. 2017.
FLORENCIO, Heitor Medeiros. Sistemas Embarcados: Temporizadores e Contadores. Departamento de Engenharia de Computação e Automação, Universidade Federal do Rio Grande do Norte. Disponível em: <http://www.dca.ufrn.br/~heitorm/aulasDCA/dca0119/DCA0119-09-SistemasEmbarcados-Temp-Cont.pdf>. Acesso em: 21 jan. 2017.
SOARES, Márcio José. CONFIGURANDO CORRETAMENTE OS REGISTRADORES DOS MICROCONTROLADORES AVR – parte 1: USO DOS REGISTROS PORTX, DDRX E PINX. Disponível em:
<http://www.arnerobotics.com.br/eletronica/Configurando_corretamente_regsAVR_pt1.htm>. Acesso em: 21 jan. 2017.
SOUZA, Fábio. Arduino UNO. Disponível em: <https://www.embarcados.com.br/arduino-uno/>. Acesso em: 02 fev. 2017.
wikipédia a enciclopédia livre. Wiring. 2017. Disponível em: <https://pt.wikipedia.org/wiki/Wiring>. Acesso em: 11 mar. 2018.
SOUZA, Fábio. Shield EDU-IFSP do GERSE – IFSP Guarulhos. 2017. Disponível em: <https://www.embarcados.com.br/shield-edu-ifsp/>. Acesso em: 02 fev. 2017.
Tiago Gala. Eclipse em vez do AVRStudio em Linux ou como Programar o Arduino em C. Disponível em: <https://therandombit.wordpress.com/2011/10/26/eclipse-em-vez-do-avrstudio-em-linux/>. Acesso em: 16 mar. 2018.
Edivaldo Brito, Como Instalar a última versão do Eclipse no Linux manualmente. Diponivel em: <http://www.edivaldobrito.com.br/eclipse-no-linux/>. Acesso em: 16 mar. 2018.
Raimundo Alves Poelart. Criar atalhos (lançadores) para programas no Gnome. Diponivel em: <https://www.vivaolinux.com.br/dica/Criar-atalhos-(lancadores)-para-programas-no-Gnome> Acesso em: 16 fev.
Eclipse, About the Eclipse Foundation. Disponível em: <http://www.eclipse.org/org/>, Acesso em 5 de Abril.
Lendo e Escrevendo nos pinos do Arduino com linguagem C/C++ >>
Formado em Tecnologia em Automação Industrial e membro do Grupo de Estudos em Robótica e Sistemas Embarcados GERSE.
AnteriorAnteriorOSD3358-SM-RED: Placa compatível com a Beaglebone Black
PróximoConhecendo o co-processador ULP (Ultra Low Power) do ESP32Próximo
Primeiro de tudo, parabéns pelo post.
Sou iniciante no linux, estou usando a distro xubuntu 20.04
Segui todos os passos do tutorial, mas não estou conseguindo compilar o programa
Quando eu dou build, aparece a seguinte msg no console
tentando verificar os paths também achei a seguinte mensagem:
Path for 'GNU make' is not valid
Nesse artigo eu uso o eclipce CDT Galleu tenta utilizar o mais recente "http://download.eclipse.org/tools/cdt/releases/9.11" Vc pode instalar o programa make também (sudo apt install malek, mas acho que não deva ser isso ).
Mas isso me parece ser algum problema com o Eclipse, ou algum problema na criação do projeto.
Parabéns Pedro ! Muito bom !
Como ativar o recurso de auto-completar do eclipse (como o existente no Atmel Studio) ?
Então no eclipse oxgeny parece que por padrão esse recurso já vem ativado, basta você segurar a tecla Ctrl e apertar espaço dai ira aparecer uma caixa de dialogo com as sugestões