20 Comentários

GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1

Eclipse + FreeRTOS

Até o momento a série GNU ARM Cross-toolchain vinha sendo praticada somente com o auxílio de um editor básico de texto e chamadas de ferramentas de compilação e depuração por meio da linha de comando num sistema operacional Linux. Esse tipo de atividade não é produtiva, pois a maior parte das atividades de uma equipe de desenvolvimento está na edição e depuração do código de um projeto. Visando um ganho de produtividade e facilitar a vida do desenvolvedor, foi criado um tutorial de como trabalhar com uma IDE open-source, no nosso caso o Eclipse, para a criação de projetos de sistemas embarcados bare-metal e baseados em RTOS.

A IDE escolhida: Eclipse

Por que precisamos de uma IDE (Integrated Development Environment)? Porque precisamos ser ágeis, e um ambiente de desenvolvimento desse tipo pode nos ajudar a atingir esse objetivo. Uma IDE oferece um conjunto de ferramentas de desenvolvimento utilizadas durante um projeto, desde um editor de texto e um depurador até ferramentas de gerenciamento do ciclo de vida de uma aplicação. Num sistema operacional Linux essas ferramentas são uma coleção de programas de linha de comando, independentes entre si. Usando uma interface gráfica, o ciclo modificação - compilação - implantação - depuração de uma aplicação é realizado usando o mesmo ambiente.

O projeto Eclipse foi criado pela IBM em novembro de 2001, suportado por uma comunidade formada por indivíduos e um consórcio de empresas de software. Nesse momento foi reaproveitada uma IDE que estava sendo desenvolvida na época pela IBM, chamada VisualAge. Em janeiro de 2004 foi criada a Fundação Eclipse, sem fins lucrativos, para ser a responsável pelo projeto.

O Eclipse é baseado no conceito de plataforma aberta para integração de ferramentas. E para oferecer escalabilidade, a plataforma Eclipse usa a arquitetura de plug-ins. Ao invés de ser uma IDE monolítica, o Eclipse oferece um framework no qual outras IDEs podem ser construídas, tendo como base a grande quantidade de plug-ins disponíveis e a possibilidade de novos serem criados. Atualmente a plataforma atingiu um ponto de maturidade muito interessante, sendo que algumas IDEs são fruto dessa iniciativa: Code Composer Studio, LPCXpresso IDE e Atollic TrueSTUDIO.

Muito bem! Vamos montar agora o ambiente de desenvolvimento para microcontroladores ARM Cortex-M em C/C++, usando o Eclipse e seus plug-ins. Um resumo do que será abordado na primeira parte deste artigo: 

  • Instalação da IDE Eclipse para C/C+;
  • Instalação da JRE (Java Runtime Environment);
  • Instalação do Cross-toolchain;
  • Instalação dos plug-ins;
  • Criação do workspace;
  • Instalação de plug-ins;
  • Criação de um novo Projeto C;
  • Configuração do build system;
  • Compilação do projeto.

A configuração do ambiente para depuração será apresentada na segunda parte deste artigo. Caso não tenham sido realizados os passos listados no primeiro artigo da série, é interessante que esses sejam executados de forma a tirar maior proveito dos conceitos apresentados a seguir.

Instalação do Eclipse IDE para C/C++

O primeiro passo é instalar o Eclipse para desenvolvimento em C/C++ na máquina host. Utilizaremos a última versão disponível dessa plataforma, o Eclipse Luna (4.4.0) SR1-RC1. Para isso realizamos os seguintes comandos:

Para um host Linux de 64 bits:

Para um host Linux de 32 bits:

Para um host Linux de 64 bits:

Para um host Linux de 32 bits:

Será criada a pasta eclipse no diretório ~/work/tools. Para facilitar a nossa vida, vamos adicionar o caminho do executável eclipse no PATH do sistema. Edite o arquivo ~/.bashrc.

Altere o conteúdo da variável PATH nesse arquivo, como a seguir:

Aplique as modificações:

Instalação da JRE (Java Runtime Environment)

Como o Eclipse é desenvolvido em Java, é obrigatória a instalação da Máquina Virtual Java (JVM) no PC. Não é necessário instalar o pacote de desenvolvimento Java, JDK (Java Development Kit), e sim somente o pacote de runtime, JRE (Java Runtime Environment).

Execute o seguinte comando para a sua instalação: 

Instalação do Cross-toolchain

Uma outra escolha que deve ser feita é a do cross-toolchain a ser utilizado. Neste artigo é utilizado o cross-toolchain GCC ARM Embedded, disponibilizado pela Linaro, que oferece ferramentas otimizadas para a arquitetura ARM. Execute os seguintes comandos para a sua instalação no host:

Criação do workspace

O Eclipse é baseado em workspaces, nos quais são criados projetos. Podemos criar diversos workspaces, cada um com um conjunto específico de projetos. Como não criamos algum ainda, temos que fazê-lo. Execute o seguinte comando para criar um workspace para os projetos que usam a placa STM32F4Discovery:

Agora que todos pré-requisitos para o uso do Eclipse foram verificados, é hora de executá-lo:

Assim que a IDE é inicializada, é pedido o caminho do workspace a ser utilizado. Indique o caminho do diretório recém-criado.

Instalação de plug-ins

Uma vez que a IDE esteja instalada, é necessário adaptá-la para o nosso ambiente. Essa adaptação é realizada por meio de plug-ins. Mas o que faltaria então para ser possível desenvolver aplicações em C/C++ para microcontroladores ARM Cortex-M?

Estamos utilizando um cross-toolchain que não é suportado nativamente pelos plug-ins padrões do Eclipse. Atualmente é suportado o compilador GCC, tanto na sua versão Cross quanto na versão nativa, mas que seja utilizado para gerar binários que sejam executados em sistemas operacionais baseados em Linux. Ou seja, o plug-in que oferece suporte para desenvolvimento de aplicações Linux, tanto nativas quanto cross-compiladas, já está presente na IDE Eclipse CDT. Para o uso em sistemas bare-metal ou baseados em RTOS’s, como é o nosso caso, deve ser instalado um conjunto de plug-ins, GNU ARM Eclipse Plug-ins, atualmente mantido por Liviu Ionescu.

Além de procurar suporte para o cross-compilador utilizado, precisamos encontrar um plug-in que ofereça suporte para a depuração via hardware. Para isso vamos utilizar o plug-in C/C++ GDB Hardware Debugging, que faz parte do pacote CDT, e que possui dependência dos plug-ins anteriores.

Para a instalação desse conjunto de plug-ins, siga os seguintes passos:

1) Na barra de menus do Eclipse, clique no comando Help -> Install New Software…. Vai aparecer a seguinte tela:

eclipse-freertos-new-c-project

2) Clique no botão Add... para adicionar um novo repositório de plug-ins.

3) Na nova janela que é apresentada, insira os seguintes dados:

Name: CDT

Location: http://download.eclipse.org/tools/cdt/releases/8.4

Depois clique no botão OK.

eclipse-freertos-add-repository-cdt

4) A tela seguir é exibida, indicando os plug-ins disponíveis para download referente ao repositório indicado. Selecione a opção CDT Optional features -> C/C++ GDB Hardware Debugging, e clique no botão Next

eclipse-freertos-install-gdb-hardware-debugging

5) Assim como no processo anterior, para que a instalação tenha efeito é necessário reiniciar o Eclipse. Na nova janela que aparece durante a instalação, clique no botão Yes para que isso aconteça.

eclipse-freertos-restart

Agora que temos o suporte para o depurador via hardware que vamos utilizar no projeto, precisamos que o suporte ao cross-compilador também seja obtido. Para isso um outro plug-in, GNU ARM Eclipse, é necessário. Siga os seguintes passos para a sua instalação:

1) Na barra de menus do Eclipse, clique no comando Help -> Install New Software…. Vai aparecer a seguinte tela:

eclipse-freertos-install-new-plugin

2) Clique no botão Add... para adicionar um novo repositório de plug-ins.

3) Na nova janela que é apresentada, insira os seguintes dados:

Name: GNU ARM Eclipse

Location: http://gnuarmeclipse.sourceforge.net/updates

Depois clique no botão OK.

eclipse-freertos-add-repository-gnu-arm-plugin

4) A tela seguir é exibida, indicando os plug-ins disponíveis para download referente ao repositório indicado. Selecione a única opção que aparece, GNU ARM C/C++ Cross Development Tools, e clique no botão Next.

eclipse-freertos-install-gnu-arm-development

5) Durante a instalação, o você vai ser questionado se deseja continuar a instalar um software de conteúdo não assinado. Responda OK!

eclipse-freertos-install-confirmation

6) Para que a instalação tenha efeito é necessário reiniciar o Eclipse. Na nova janela que aparece durante a instalação, clique no botão Yes para que isso aconteça.

eclipse-freertos-restart

Criação de um novo Projeto C

Para a criação de um novo projeto em C, siga os seguintes passos:

1) Na barra de menus do Eclipse, clique no comando File -> New -> Project -> C/C++ -> C Project. Clique no botão Next. Na janela que é exibida em seguida, insira os seguintes dados:

Project Name: freertos_hello_world

Project Type: Executable -> Hello World ARM C Project

Toolchains: Cross ARM GCC

A janela preenchida deve ficar da seguinte forma:

eclipse-freertos-create-arm-c-project

Clique no botão Next.

2) Em seguida são pedidos alguns dados para a configuração do projeto. Use a seguinte configuração:

Author: Seu nome

Copyright notice: Teste do Embarcados (ou algo que desejarem!)

Hello world greeting: Hello ARM World! (também vai do gosto do cliente!)

Source folder: src

Linker semi-hosting options: --specs=rdimon.specs -Wl,--start-group -lgcc -lc -lc -lm -lrdimon -Wl,--end-group (manter os dados padrões)

A janela preenchida deve ficar da seguinte forma:

eclipse-freertos-project-properties

Clique no botão Next.

3) Agora devem ser informadas quais configurações de deploy que desejamos para o projeto. Selecione Debug e Release e clique no botão Next.

eclipse-freertos-configurations

4) Na janela seguinte devem ser informados o nome do toolchain utilizado e o seu caminho. Use os seguintes dados:

Toolchain name: GNU Tools for ARM Embedded Processors (arm-none-eabi-gcc)

Toolchain path: /opt/toolchains/eabi/gcc-arm-none-eabi-4_8-2014q2/bin

eclipse-freertos-cross-toolchain-selection

Clique no botão Finish.

5) Agora o workspace que criamos tem um novo projeto, como mostra a figura abaixo:

eclipse-freertos-workspace

O Eclipse gera o novo projeto com a seguinte estrutura:

Projeto (freertos_hello_world)

- Includes

- src (nome dado durante a configuração)

Usaremos essas pastas da seguinte forma:

  • Includes: são apontados os diretórios de arquivos-cabeçalho do toolchain utilizado;
  • src: código e seu arquivos-cabeçalho, além de bibliotecas quando necessário.

Usaremos o projeto de exemplo do FreeRTOS apresentado num post anterior da série. É necessário realizar o download dos arquivos desse projeto [wpfilebase tag=fileurl path='posts/freertos_hello_world.tar.bz2' linktext=aqui /] [wpfilebase tag=fileurl path='documento/freertos_hello_world.tar.bz2' linktext=aqui /]. Use a pasta ~/work/dl como pasta de destino do download. Os arquivos contidos nesse pacote são os mesmos do projeto apresentado no post mencionado anteriormente, porém não contém o arquivo Makefile e possui uma estrutura com pequenas modificações com relação à organização original.

Esse projeto-exemplo contém uma terceira pasta, projects. A sua função é armazenar os arquivos de configuração do projeto, tais como os arquivos de script do linker.

Assim que o download for finalizado, execute os seguintes comandos para descompactar o arquivo:

Precisamos agora importar os arquivos que foram baixados no projeto criado. Para isso siga os seguintes passos:

1) Selecione o projeto no workspace clicando no seu nome. Feito isso, clique com o botão direito do mouse e selecione o comando Import…. Na janela que é exibida, selecione a fonte como sendo General -> File System, como mostrado abaixo:

eclipse-freertos-import-project

Clique no botão Next.

2) Na janela Import, insira o caminho /tmp/freertos_hello_world, local onde foi descompactado o arquivo baixado. Vai aparecer a estrutura de diretórios mostrada na figura abaixo. Selecione o diretório raiz, freertos_hello_world. Dessa forma os seu sub-diretórios são automaticamente selecionados. Mantenha o campo Into folder com o conteúdo freertos_hello_world.

eclipse-freertos-import-resources

Clique no botão Finish.

3) Os novos arquivos foram adicionados ao projeto, como mostrado na figura abaixo. Nessa mesma figura é exibido um arquivo que precisa ser removido, src/main.c, o qual foi criado automaticamente pela IDE. Clique com o botão direito do mouse nesse arquivo e selecione o comando Delete, e em seguida clique no botão OK da janela de confirmação.

eclipse-freertos-main-added-project

4) Foram adicionados ao projeto todos os arquivos da biblioteca STM32F4 DSP and standard peripherals e por isso precisa-se selecionar somente aqueles necessários para esse projeto. Da mesma forma é necessário selecionar somente uma implementação de gerenciamento de memória do FreeRTOS, a heap_2.c. Para isso selecione todos os arquivos, como mostrado nas imagens a seguir, que devem ser removidos do build system. Clique com o botão direito do mouse em um deles e selecione o comando Resource Configurations -> Exclude from Build…. Remova-os das duas configurações de projeto criadas: Debug e Release.

Arquivos necessários da biblioteca STM32F4 DSP and standard peripherals: 

  • misc.c;
  • stm32f4xx_exti.c;
  • stm32f4xx_gpio.c;
  • stm32f4xx_rcc.c;
  • stm32f4xx_syscfg.c.
eclipse-freertos-remove-drivers-project
eclipse-freertos-remove-drivers-project-std-peripherals

Para a compilação do projeto é necessário mais um passo, o da configuração do build system.

Configuração do build system

1) Clique com o botão direito do mouse no nome do projeto dentro do workspace e selecione a opção Properties. Na nova janela que é exibida, siga o caminho C/C++ Build -> Settings -> Tool Settings -> Target Processor. São listadas algumas opções para a configuração do target, ou seja, do microcontrolador utilizado no projeto. Altere os seguintes dados:

ARM family: cortex-m4

Float ABI: FP instructions (hard)

A nova configuração deve estar de acordo com a imagem a seguir:

eclipse-freertos-target-processor

2) Na configuração do preprocessor precisa-se adicionar duas definições de símbolos:

  • USE_STDPERIPH_DRIVER;
  • STM32F40_41xxx.

Para isso, selecione a configuração Cross ARM C Compiler -> Preprocessor e adicione cada um desses símbolos por meio do botão . Dessa forma, a nova configuração deve estar igual a da figura abaixo:

eclipse-freertos-preprocessor

3) O próximo passo é adicionar os caminhos de procura de arquivos-cabeçalho. Para isso, selecione a configuração Cross ARM C Compiler -> Includes e adicione cada diretório na área Include paths por meio do botão . Procure os diretórios por meio do botão Workspace… na nova janela que é exibida.

eclipse-freertos-preprocessor-add-dir-path

Ao selecionar o botão Workspace…, a seguinte janela é exibida:

eclipse-freertos-preprocessor-add-folders

Selecione os seguintes diretórios por meio dessa interface: 

  • project;
  • src;
  • src/Libraries/CMSIS/Include;
  • src/Libraries/STM32F4xx_StdPeriph_Driver/inc;
  • src/FreeRTOS/Source/include;
  • src/FreeRTOS/Source/portable/GCC/ARM_CM4F.

A nova configuração deve ficar da seguinte forma:

eclipse-freertos-preprocessor-includes

4) O passo seguinte é indicar o arquivo linker-script do projeto. Para isso, selecione a configuração Cross ARM C Linker -> General. Na área Script files são exibidos os arquivos de script atualmente selecionados para o projeto. Adicione um novo arquivo por meio do botão  e o procure por meio do botão Workspace… na nova janela que é exibida.

eclipse-freertos-add-linker-script

Selecione o arquivo stm32f4_flash.ld que está dentro do diretório project do projeto.

eclipse-freertos-linker-script-selection

Clique no botão OK. Na mesma janela de configuração do linker, Cross ARM C Linker -> General, selecione o check-box "Do not use standard start files (-nostartfiles)", pois o projeto já contém um arquivo de start-up próprio. A configuração final deve ficar igual a da figura abaixo:

eclipse-freertos-linker-config

5) Como o script-file faz uso da diretiva INCLUDE, precisa-se adicionar um caminho de procura de bibliotecas. Para isso, na configuração Cross ARM C Linker -> Libraries -> Library search path, adicione o caminho da pasta project do projeto, como mostrado a seguir:

eclipse-freertos-linker-path

Compilação do projeto

Pronto! Toda a configuração necessária para se compilar o projeto foi feita. Então...vamos lá! Clique no nome do projeto dentro do workspace com o botão direito do mouse e selecione o comando Build Project. A compilação vai ocorrer com sucesso e a saída de console da IDE é exibida a seguir:

eclipse-freertos-compilacao

Na continuação deste artigo será explicado como configurar o ambiente de depuração com GDB e OpenOCD, como foi utilizado nos artigos anteriores.

Agradecimentos

Esse artigo foi revisado por Carlos Márcio Freitas, que contribuiu com alterações no texto e correções. Muito obrigado Carlos!

Outros artigos da série

<< GNU ARM Cross-toolchain – FreeRTOS + GCC + STM32F4Discovery - Parte 2GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC - Parte 2 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC - Parte 1
Comentários:
Notificações
Notificar
guest
20 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Rafael Dias
Rafael Dias
02/10/2015 11:34

Viu as novas funcionalidades do GNU ARM Eclipse?
A que mais me chamou a atenção é a possibilidade de uso do QEMU...

Henrique Rossi
Reply to  Rafael Dias
07/10/2015 23:43

Ótima notícia! Não vai ter desculpa para não testar o firmware agora... 😀

Rafael Dias
Rafael Dias
31/08/2014 17:25

opa!

usei o mesmo procedimento, só que acabei utilizando o compilador da CodeSourcery.

Com ele experimentei um erro no linker, relacionado a uma falta do arquivo rdimon.specs. Fiquei me debatendo por algumas horas e acabei desistindo.

Alterei para o compilador presente no post, da launchpad.net, e deu tudo certo.

Henrique Rossi
Reply to  Rafael Dias
06/09/2014 11:06

Olá Rafael!

O arquivo de spec "rdimon.specs" usado pelo flag do linker "–specs=rdimon.specs" é específico para o cross-compiler da Linaro, e não é oferecido provavelmente pela ferramenta da CodeSourcery. Precisa alrerar alguns pontos da configuração do projeto, mas mínimos. Inclusive tem uma opção do tipo de toolchain específica para a CodeSourcery nas configurações do projeto.

Que bom que deu certo! 🙂

Abraços!

Eduardo Scherrer
Eduardo C. Scherrer
19/04/2014 22:08

Boa noite Henrique, O eclipse apareceu um pouco diferente da versão apresentada neste post. Primeiro eu estava com o Ubuntu 12.04 32bits. Então achei que pele eclipse ser 32bits, possuisse uma interface diferente, então atualizei o meu Ubuntu para 14.04 e 64bits. Mesmo assim, o eclipse apareceu da mesma maneira. No momento que eu crio o projeto, no lugar de informar o autor do projeto, aparecem alguns locais de pastas, como CMSIS, DEVICE, configurações do processador. Até aí eu indiquei o que me pareceia conveniente. No momento que o projeto foi criado, algumas pastas apareceram, como "system". Eu deixei a… Leia mais »

Henrique Rossi
Reply to  Eduardo C. Scherrer
19/04/2014 23:38

Olá Eduardo!

Houve uma atualização do plug-in GNU ARM Eclipse no dia 12/04/2014 (http://gnuarmeclipse.livius.net/blog/2014/04/11/version-2-2-1-201404120702-released/) e a opção que utilizei foi substituída por "generic Cortex-M template". A princípio vou utilizar o tipo de projeto "Hello World ARM C Project", mas vou verificar com mais detalhes e atualizar o post com essa nova atualização. Muito obrigado Eduardo pelo teste!!

Abraços!

Henrique Rossi
Reply to  Eduardo C. Scherrer
20/04/2014 13:44

Olá Eduardo!

Atualizei o post e agora é levado em consideração a atualização do plug-in. Atualizei o tópico de criação do projeto. Se encontrar outro problema, pode entrar em contato, por favor.

Grande abraço e obrigado pela ajuda!

Eduardo Scherrer
Eduardo C. Scherrer
Reply to  Henrique Persico Rossi
20/04/2014 16:24

Boa tarde Henrique,

Perfeito, funcionou como no post.
Obrigado por atualizar tão rápido.

Abraço

Henrique Rossi
Reply to  Eduardo C. Scherrer
20/04/2014 16:38

Olá Eduardo!

Eu que lhe agradeço! Testei o tipo de projeto "STM32F4xx C/C++ Project", que faz uso na nova biblioteca stm32fxx HAL, e funcionou muito bem! Vou estudar essa nova lib, que talvez substitua a lib anterior de periféricos da ST.

Abraços!

Rafael Dias
Rafael Dias
27/04/2016 20:36

sumiram algumas imagens

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Rafael Dias
27/04/2016 22:05

Olá Rafael, vamos verificar o problema. Obrigado

Henrique Rossi
Reply to  Rafael Dias
15/05/2016 00:06

Imagens recuperadas. Obrigado Rafael!

trackback
10/02/2015 20:33

[…] Parte 2: GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1 […]

trackback
13/01/2015 11:04

[…] GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1 » 16-04-2014 […]

trackback
23/08/2014 18:21

[…] GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1 […]

trackback
23/08/2014 17:54

[…] GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1 […]

trackback
11/07/2014 20:06

[…] GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1 […]

trackback
31/05/2014 22:46

[…] GNU ARM Cross-toolchain – Eclipse + FreeRTOS + GCC – Parte 1 […]

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link