Na primeira parte deste artigo foi detalhado o procedimento para a criação de um projeto em C/C++ no Eclipse para uso em sistemas embarcados bare-metal ou baseados em RTOS. Neste post vamos dar continuidade a esse processo e detalhar como configurar esse ambiente para depuração usando GDB e OpenOCD. É obrigatório que o procedimento listado no post anterior tenha sido seguido.
Neste post serão abordados os seguintes tópicos:
- Quais são os plug-ins necessários?;
- Cliente GDB e servidor GDB (OpenOCD);
- Criação da configuração de depuração;
- Considerações finais.
Plug-ins necessários
O conjunto de plug-ins GNU ARM Eclipse foi instalado no post anterior, cuja finalidade é dar suporte ao cross-toolchain e também ao depurador via hardware e OpenOCD.
Cliente GDB e servidor GDB (OpenOCD)
Assim como os plug-ins, o cliente GDB já foi instalado no post anterior, quando foi instalado o cross-toolchain. O seu binário, arm-none-eabi-gdb, faz parte do pacote do cross-toolchain da Linaro.
Os passos para instalação do servidor GDB, o OpenOCD, foram listados no primeiro post da série GNU ARM Cross-toolchain. Caso não tenha seguido esses passos, execute-os antes de dar prosseguimento a este artigo. Com isso os pré-requisitos já foram preenchidos e podemos seguir com a criação da configuração de depuração.
Criação da configuração de depuração
Antes de utilizarmos o OpenOCD, é preciso indicar no ambiente de desenvolvimento o local de instalação do OpenOCD, já que essa é uma ferramenta externa ao Eclipse. Para isso, siga os seguintes passos:
1) Na barra de menus do Eclipse, clique no comando Window -> Preferences. Vai aparecer a seguinte tela:
2) Selecione o sub-menu Run/Debug -> String Substitution.
3) Crie uma nova variável clicando no botão New. Na nova janela que é exibida, insira o conteúdo abaixo e clique em OK.
Name: openocd_path
Value: /home/<usuario>/work/tools/openocd/bin
Description: OpenOCD
Obs: Substitua o texto <usuario> pelo usuário atualmente logado no PC.
Agora podemos criar uma nova configuração de depuração, seguindo os seguintes passos:
1) Na barra de menus do Eclipse, clique no comando Run -> Debug Configurations…. Vai aparecer a seguinte tela:
2) Selecione o item GDB OpenOCD Debugging na lista que aparece à esquerda e clique com o botão direito. No menu que é exibido, selecione New. Vai ser criada automaticamente a configuração freertos_hello_world Debug, como mostrado abaixo:
3) Pequenas modificações devem ser realizadas com relação à configuração padrão. O conteúdo de duas abas deve ser alterado:
Debugger
Adicionar as opções abaixo no campo OpenOCD Setup -> Other options.
-s /home/<usuario>/work/tools/openocd/share/openocd/scripts -f board/stm32f4discovery.cfg
Obs: Substitua o texto <usuario> pelo usuário atualmente logado no PC.
Common
Selecione o check-box Save as -> Shared file e adicione o nome do projeto (por padrão esse campo já vem preenchido corretamente).
/freertos_hello_world
4) O conteúdo da aba Startup pode deixar inalterado. Confira os valores que são configurados por padrão:
5) Clique no botão Apply para aplicar as mudanças realizadas. Em seguida, conecte a placa STM32F4Discovery na porta USB do seu PC e clique no botão Debug.
O código da aplicação começa a ser depurado com um breakpoint no começo da função main(), como mostra a figura abaixo:
6) A partir de agora podemos depurar o código da aplicação. Seguem alguns comandos:
- Step Over: Barra de menus -> Run -> Step Over (F6);
- Step Into: Barra de menus -> Run -> Step Into (F5);
- Resume: Barra de menus -> Run -> Resume (F8);
- Suspend: Barra de menus -> Run -> Suspend;
- Terminate: Barra de menus -> Run -> Terminate (Ctrl + F2).
Caso desejem, podem ser utilizados os atalhos disponíveis na barra de ferramentas da IDE:
Para iniciar uma nova seção de depuração, na barra de ferramentas existe um atalho chamado Debug . Clique na seta e escolha o nome da configuração de depuração desejada. No nosso caso, freertos_hello_world Debug.
Considerações finais
Nesse projeto foi utilizado um debug adapter já presente na placa de desenvolvimento, o ST-LINK/V2. Num projeto real, esse hardware pode ser um equipamento externo à placa do produto, e envolver comunicação JTAG, por exemplo. Nesse caso tem-se que alterar a compilação do software OpenOCD para oferecer o suporte a essa comunicação, ou gerar uma versão desse aplicativo que já forneça o suporte a diversos meios de comunicação.
No final de contas, vale a pena utilizar uma plataforma open-source para desenvolvimento de projetos na sua empresa? Agora chega aquela parte onde temos que avaliar as vantagens e desvantagens desse tipo de ambiente.
Vantagens
- Não há custo envolvido para aquisição de ferramentas de software;
- Pode-se criar plug-ins customizados para uma empresa ou equipe, pois o padrão é aberto. Afinal, essa é uma facilidade oferecida pelo Eclipse!;
- Existem muitos plug-ins para o gerenciamento do ciclo de vida de uma aplicação;
- Mesmo que não exista o suporte dentro do OpenOCD do hardware utilizado, pode ser utilizado um hardware externo proprietário e associá-lo como uma ferramenta externa à IDE.
Desvantagens
- O compilador utilizado é otimizado para a plataforma ARM, embora os compiladores pagos geralmente oferecem melhores otimizações;
- Os ambientes pagos oferecem mais ferramentas de depuração;
- Por se tratar de um ambiente sem custos, o suporte é oferecido pela comunidade, ao passo que o suporte de uma ferramenta paga traz consigo um suporte mais ágil;
- O microcontrolador que vai ser utilizado no projeto deve possuir o suporte no OpenOCD (se este for utilizado);
- As ferramentas pagas geralmente trazem muitos plug-ins para análise de uso de diversos RTOS’s, o que facilita o desenvolvimento, embora exista um plug-in gratuito para FreeRTOS no Eclipse.
Muito bem pessoal, gostaria muito da colaboração de vocês para trazerem sugestões e críticas para tentarmos promover o uso de um ambiente open-source, caso seja de interesse de vocês, é claro! Afinal de contas, é para uso da comunidade!
Artigos da série GNU ARM Cross-toolchain:
GNU ARM Cross-toolchain – Compilação e OpenOCD
GNU ARM Cross-toolchain – Configurando stack e heap
GNU ARM Cross-toolchain – OpenOCD + GDB
GNU ARM Cross-toolchain – FreeRTOS + GCC + STM32F4Discovery – Parte 1
GNU ARM Cross-toolchain – FreeRTOS + GCC + STM32F4Discovery – Parte 2
GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1
GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 2