Tutorial Energia + Eclipse CDT + OpenOCD + Tiva + Stellaris = Desenvolvimento C/C++ com debug+JTAG
Tutorial completo com exemplos.
[update 2014/03/29]
O código do projeto usado no projeto pode ser clonado do meu github
https://github.com/murix/energia-0101E0012-eclipse-cdt-openocd
[post original]
Como montar um ambiente de desenvolvimento C/C++ para ARM embarcado?
Minha sugestão é usar o já consagrado eclipse CDT com os toolkits / frameworks / compiladores do projeto Energia. O projeto Energia (http://energia.nu) é um fork do Arduino para as placas de desenvolvimento da Texas (MSP430 e ARM). Por ser um fork do Arduino, o projeto Energia sofre da falta de ferramentas de debug / JTAG. O projeto Energia já vem com a ferramenta de depuração GDB, mas carece de ferramentas para JTAG como o OpenOCD. Toda essa problemática de falta de ferramentas por ser resolvida facilmente. Como todas essas ferramentas são opensource, é só baixar todas e configurar tudo para funcionar junto.
1) Downloads das ferramentas
Então vamos ao que interessa, primeiro precisamos baixar todas ferramentas atualizadas.
Este tutorial é voltado para Windows e Linux, infelizmente o MacOS X ficou de fora pois não tenho nenhum Mac para testar (aceito doações).
1) Eclipse CDT
http://eclipse.c3sl.ufpr.br/technology/epp/downloads/release/kepler/SR2/eclipse-cpp-kepler-SR2-win32.zip
2) Energia
http://energia.nu/download/downloadv3.php?file=energia-0101E0012-windows.zip
3) OpenOCD
http://www.freddiechopin.info/en/download/category/4-openocd?download=99%3Aopenocd-0.7.0
No Linux (ArchLinux) algumas ferramentas podem ser instalados com uma única linha de comando:
1) Eclipse CDT e Openocd
pacman -S eclipse-cdt openocd
2) Energia
http://energia.nu/download/downloadv3.php?file=energia-0101E0012-linux.tgz (32bits)
http://energia.nu/download/downloadv3.php?file=energia-0101E0012-linux64.tgz (64bits)
2) Montando o ambiente
O primeiro passo é extrair o eclipse-cdt, openocd e energia.
Para facilitar recomendo criar uma pasta com todos os downloads das ferramentas e extrair tudo dentro. Como exemplo, criei a pasta arm-toolchain e extrai as ferramentas dentro. |
3) Configurando o OpenOCD
Primeiro vamos testar o OpenOCD que é o nosso debug / JTAG.
O método é: abrir um terminal (windows+r, cmd.exe, enter) e fazer como abaixo
Ao executar o openocd pela primeira vez é preciso liberar as portas no firewall do windows, ou então desativar o firewall do windows completamente. |
OpenOCD usando configuração da board EK-LM4F120XL. Esta configuração é usada para depurar a Stellaris LM4F120XL, Tiva C Series, Tiva Ethernet. |
No windows algumas placas se recusam a funcionar com OpenOCD por motivo ainda desconhecido, no Linux todas as minhas 10 stellaris LM4F120XL e duas Tiva C Series, funcionaram sempre de primeira.
Já atualizei o firmware de todas as 12 placas usando o LMFLASH Programmer como expliquei no outro post (http://dronespersonalizados.blogspot.com.br/2014/03/atualizar-firmware-do-icdi-jtag-da-tiva.html).
Mas ainda não resolveu esse problema de somente algumas não funcionarem com o OpenOCD do Windows, se alguém tiver uma ideia ou souber a solução me conte. [ No Mac parece que o problema também não existe, o bug pelo jeito é no Windows 8 e 8.1 ]
O OpenOCD deve ficar aberto durante todo o processo de depuração, ele age como um servidor GDB na porta 3333. É nesta porta que vamos conectar o cliente GDB do Energia através do Eclipse CDT.
4) Criando o projeto do Energia (C++) no Eclipse
Agora vamos iniciar o Eclipse CDT e criar um novo projeto C++ com GCC Cross Compiler.
O projeto deve ser o C++ vazio com Cross GCC, |
4.1 ) Configurando Cross Compiler
4.2 ) Configurando tipo do Builder
Nas propriedades do projeto é preciso mudar o tipo de builder
Abra as configurações do projeto e mude o tipo de builder para "internal" |
4.3 ) Adicionando arquivos para o projeto
Vamos adicionar os arquivos do Energia.
Vamos adicionar os arquivos do Energia.
4.4 ) Excluindo do build bibliotecas não mandatórias
Remova as libs marcadas de todos os builds (Debug e Release) |
4.5 ) Configurando includes C e C++
Configure no projeto os diretórios de include C e C++
"${workspace_loc:/${ProjName}/lm4f/cores/lm4f}"
"${workspace_loc:/${ProjName}/lm4f/libraries/EEPROM}"
"${workspace_loc:/${ProjName}/lm4f/libraries/SPI}"
"${workspace_loc:/${ProjName}/lm4f/libraries/Wire}"
"${workspace_loc:/${ProjName}/lm4f/variants/stellarpad}"
Configure os includes do C e C++, o projeto Energia precisa de ambos |
4.6) Configurações Misc do Compilador
Nas configurações Misc do Projeto é preciso complementar a linha:
-c -fmessage-length=0
Com esse trecho para C++:
Nas configurações Misc do Projeto é preciso complementar a linha:
-c -fmessage-length=0
Com esse trecho para C++:
-fno-rtti -fno-exceptions -ffunction-sections -fdata-sections -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -DF_CPU=80000000L -DARDUINO=101 -DENERGIA=12
Com esse trecho em C (tudo do C++ menos o RTTI ):
-fno-exceptions -ffunction-sections -fdata-sections -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -DF_CPU=80000000L -DARDUINO=101 -DENERGIA=12
Configurações MISC do projeto |
4.7) Configurações Misc do Linker
Também é necessário configurar o linker MISC do GCC com o seguinte trecho:
-Os -nostartfiles -nostdlib -Wl,--gc-sections -T "${workspace_loc:/${ProjName}/lm4f/cores/lm4f/lm4fcpp_blizzard.ld}" -Wl,--entry=ResetISR -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant
Configure o link flags com o trecho indicado acima |
4.8) Bibliotecas mandatórias para o Linker
É preciso configurar quais bibliotecas do GCC são linkadas ao projeto
GCC Linker libs - o projeto Energia depende dos libs: m, c, gcc. (math , c runtine, gcc runtine) |
4.9 ) Criando um Sketch
Crie um arquivo chamado sketch.cpp com o conteúdo da foto
4.10) BuildAgora está tudo pronto para fazer o build.
Build do Energia usando o Eclipse perfeito, sem nenhum warning! |
Lembra do OpenOCD no terminal, ele ainda deve estar aberto, pois agora vamos gravar o projeto usando o GDB client conectado no OpenOCD, tudo isso de dentro do eclipse no view de debug.
5) Instalar o plugin do GDB para debug de Hardware
No eclipse, vá até o menu "help" e escolha "install new software"
Escolha o repositório padrão do eclipse, no grupo "Mobile and Device Development", instale o "C/C++ GDB Hardware Debugging" |
Depois de concluída a instalação do C/C++ GDB Hardware Debugging,
vamos criar um configuração de debug para gravar o Energia recém compilado na placa pelo OpenOCD.
No eclipse, vá no menu "run", escolha "Debug configurations", e crie uma nova configuração como está na foto.
Crie uma nova configuração de debug do tipo GDB Hardware Debbuging |
6.1 ) Configurando GDB: caminho e porta
|
Na aba Debugger, mude a porta para 3333 e configure o caminho para o GDB. O GDB é o cliente do servidor OpenOCD. |
7) Debug View
Na view debug do eclipse, as possibilidades são infinitas, pode rodar o código step by step, editar as variáveis na RAM no meio da execução, além de inúmeros outros recursos, ..... |
Enquanto isso o OpenOCD está executado todos os comandos enviados pelo Eclipse/GDB.
OpenOCD debugging |
Para concluir com chave de ouro vamos ver se no terminal serial está chegando o texto que foi programado no sketch.
Sketch do Energia compilado no Eclipse e gravado e depurado com GDB e OpenOCD |
10) Considerações finais
Este tutorial introduziu o uso da API do Energia com um exemplo seguido da depuração com GDB / OpenOCD.
O próximo tutorial irá introduzir o FreeRTOS no projeto.