Shape The World - IDE e ferramentas para Tiva C

Embedded Systems Shape The World - Capítulos 1 a 3
Este post faz parte da série Shape The World. Leia também os outros posts da série:

Caros leitores, daremos sequência à nossa série que corre em paralelo ao curso Embedded Systems - Shape the World, oferecido pela UTAustinX - University of Texas at Austin através do sistema EDX.

 

Agora, já conhecendo um pouco mais sobre o hardware presente nas Launchpads Stellaris/Tiva C, abordaremos sobre algumas das ferramentas para Tiva C disponíveis para o desenvolvimento, desde a IDE (Integrated Development Environment ou Ambiente de Desenvolvimento Integrado) até bibliotecas para abstração do hardware. Todas essas ferramentas podem ser grandes aliadas do desenvolvedor, ajudando-o a melhorar o time-to-market do seu produto.

 

A IDE acaba sendo uma das ferramentas mais importantes neste processo, visto que sua facilidade de uso e recursos influenciam diretamente no desenvolvimento do projeto. Não iremos listar qual ferramenta é melhor, mas sim apresentar algumas características que podem guiar o leitor em sua escolha. Além do que, a escolha da ferramenta pode depender muito do fator pessoal, ou seja, como o usuário se comporta com aquele ambiente.

 

 

Code Composer Studio

 

É uma IDE desenvolvida pela Texas Instruments, e como de se esperar, suporta os microcontroladores e processadores embarcados da empresa. Possui diversas ferramentas utilizadas durante o processo de desenvolvimento e depuração das aplicações. Além disso possui fácil integração com as bibliotecas desenvolvidas pelas TI, como a StellarisWare/TivaWare, TI-RTOS e também com o projeto Energia.

 

IDE e ferramentas para Tiva C: Code Composer Studio
Figura 1 - CCS no modo edição

 

Como a aparência denuncia, o CCS é baseado no framework Eclipse, trazendo consigo toda a capacidade de debug desta ferramenta.

 

Um ponto bastante interessante é que a ferramenta permite acesso completo aos recursos, mesmo quando utilizado com a licença free. Para os usuários das launchpads que possuem emulador baseados na ferramenta de baixo custo XDS100 (como as utilizadas no curso) não existe limitação quanto ao tamanho do código, algo extremamente interessante para desfrutar de todos os recursos ou mesmo testar novas bibliotecas ou boosterpacks que dependam de códigos mais complexos e extensos. Além disso é possível escolher entre o compilador nativo da TI (que tradicionalmente oferece melhores resultados com relação a tamanho de código e capacidade de otimização bem como compatibilidade com as bibliotecas) ou mesmo no compilador baseado em GCC. Essa opção está disponível tanto para os microcontroladores da série Stellaris/Tiva, como para os da família MSP430 (não existindo limitação quanto ao tamanho do código).

 

CCS no modo Debug
Figura 2 - CCS no modo Debug

 

No modo debug permite a execução passo a passo do código, utilização de breakpoints, verificação dos registradores, acesso à memória, disassembly do código, plotar gráficos a partir de arrays (algo muito interessante quando se está trabalhando com sinais analógicos, processamento de sinais, etc), entre diversas outras opções.

 

Possui ainda uma ferramenta interessante chamada CCS GUI Composer utilizada para criação de interfaces gráficas com integração com o target.

 

IDE e ferramentas para Tiva C: Ferramenta GUI Composer no CCS
Figura 3 - GUI Composer

 

Mais recentemente a TI também aderiu à onda da nuvem e lançou o TI Cloud Tools, um conjunto de ferramentas online para desenvolvimento, indo desde a documentação e exemplos online, ferramenta pra configuração de pinos e mesmo o CCS Cloud, a versão na nuvem do compilador. Na versão atual é compatível com microcontroladores da linha MSP430, MSP432 e Tiva C, permitindo a edição dos códigos, compilação e também debug (com menor capacidade do que na ferramenta para o desktop). Além disso os usuários podem tirar suas dúvidas com relação aos dispositivos, componentes, bibliotecas e ferramentas através do E2E, uma comunidade virtual online que conta com a participação dos funcionários da TI.

 

 

Keil

 

O ARM Keil é o ambiente de desenvolvimento embarcado desenvolvido pela ARM, e por este motivo possui uma vasta compatibilidade com os mais diversos dispositivos com núcleo ARM, dos mais variados fabricantes, dentre eles os ARM Cortex-M4F da Texas Instruments.

 

Fazem parte do pacote o µVision IDE/Debugger, ARM C/C++ Compiler, e também bibliotecas essenciais para facilitar e agilizar o desenvolvimento. Além dos ARM Cortex-M, também é compatível com diversos microcontroladores da saudosa linha 8051 ainda muito utilizada em diversos segmentos do mercado.

 

IDE e ferramentas para Tiva C: Keil
Figura 4 - ARM Keil no modo Edição

 

As capacidades de debug satisfazem o desenvolvedor mais exigente também possibilitando a inserção de breakpoints, ver o disassembly do código, verificar os registradores, memória e como grande facilitador de desenvolvimento traz um simulador embutido, permitindo verificar o comportamento do código mesmo sem possuir o dispositivo físico. Segundo os idealizadores do curso esta foi uma das características que mais influenciou na sua escolha como IDE utilizada durante o curso, permitindo ao aluno testar e debugar antes de executar na placa real. Outro fator que influenciou bastante foi a capacidade de criação de plugins externos à IDE, onde tal característica permitiu a criação do sistema que verifica o código desenvolvido pelos alunos, tanto na simulação como durante o debug na placa real.

 

Keil no debug mode com simulação
Figura 5 - ARM Keil no modo debug com simulação

 

Vale ressaltar que a versão mais atual do Keil (até o momento desta publicação) é a “5”, entretanto o curso do EDX baseia-se na versão “4.73” que pode ser obtida neste link. A licença fornecida é a free, que possui limitação de 32 KB de código, entretanto, para o desenvolvimento do curso ou mesmo de códigos ligeiramente complexos e extensos, este limite supre as necessidades.

 

Além disso a ARM fornece a CMSIS - Cortex Microcontroller Software Interface Standard, um conjunto de API’s independentes do fabricante, tornando possível portar códigos entre dispositivos semelhantes mas de empresas diferentes, sem grandes dificuldades. Um dos componentes mais comentados é a CMSIS-DSP, responsável por diversas funções DSP, facilitando projetos que necessitem do processamento digital de sinais. É possível encontrar mais informações e realizar o download da CMSIS neste link.

 

 

Energia

 

O projeto Energia é uma plataforma open-source de prototipagem eletrônica baseada na plataforma Arduino que teve início em 2012, trazendo as facilidades dos frameworks Wiring e Arduino para as launchpads MSP430 da TI. A IDE, baseada na linguagem Processing, tornava mais simples e atrativa a programação das launchpads, ao mesmo tempo em que tornava possível portar sketches do Arduino sem grandes dores de cabeça, pelo menos idealmente.

 

IDE e ferramentas para Tiva C: Projeto Energia - Programação Like Arduino
Figura 6 - Energia

 

Em um primeiro momento a plataforma suportava apenas as primeiras launchpads para MSP430, mas com o tempo as opções foram se expandindo. Atualmente a plataforma da suporte a dispositivos das famílias MSP430, MSP432, TM4C (Tiva C), C2000 e CC3200, além de alguns kits third party como o RedBearLab. As versões 10 e 11 também ofereciam suporte a Launchpad Stellaris, entretanto, como o dispositivo foi descontinuado, o suporte para o mesmo também deixou de ser oferecido.

 

Dois pontos interessantes desta “IDE” é a partir do CCSv6 tornou-se possível carregar skeches do Energia, tornando possível o pleno uso das capacidades do CCS, em especial das ferramentas para debug, do meu ponto de vista uma das características que fazem muita falta nos Arduino’s tradicionais. O segundo ponto é que essa integração junto à TI trouxe novos frutos, um deles foi a possibilidade de multitasking, ou seja, é possível escrever sketches rodando múltiplas tarefas “paralelamente”. Tal abordagem tornou-se possível através da integração do Energia com o TI-RTOS.

 

Debug de Sketch no CCS
Figura 7 - Sketch Energia no CCS

 

Além da IDE, bibliotecas que facilitam e agilizam o processo de desenvolvimento são grandes aliadas dos desenvolvedores, neste ponto apresentaremos a TivaWare.

 

 

TivaWare

 

A TivaWare for C Series é uma suíte de ferramentas desenvolvidas para facilitar e acelerar o desenvolvimento de projetos utilizando os microcontroladores da família Tiva C, sendo escrita inteiramente na linguagem “C”. A suíte tem licença free e também é royalty-free use.

 

Além da facilidade de programação, esta camada de abstração de hardware possibilita portar um projeto desenvolvido em um microcontrolador para outro semelhante com grande facilidade. Por exemplo, você iniciou o projeto com um dispositivo e com o passar do tempo alguns periféricos tornaram-se necessários ou mesmo você precisará de mais memória Flash ou RAM. Ao invés de tradicionalmente ter que modificar grande parte dos registradores de configuração do hardware, você apenas modifica o seu target e a biblioteca junto ao compilador faz o trabalho de escolher os registradores e configurações corretas (desde que eles existam no novo dispositivo).

 

Neste ponto iremos exemplificar a diferença básica entre a utilização ou não da DriverLib fornecida junto à TivaWare. Para tal iremos apresentar um simples “Hello World”, que no mundo dos embarcados tradicionalmente significa realizar um blink LED, ou piscar um LED. Como base usarei a launchpad utilizada no curso junto ao CCSv6.1, tornando-se uma abordagem diferente da utilizada no curso propriamente dito.

 

 

Comparando os códigos

 

O nosso blink LED realizará a simples rotina de rotacionar entre os LEDs, para que acendam sequencialmente “Red >> Grenn >> Blue”, em um loop infinito. Para isso realizaremos duas abordagens, uma sem utilizar a TivaWare e outra utilizando-a. O resultado será o seguinte.

 

Blink LED para teste da TivaWare
Figura 8 - Blink LED

 

Antes de botar a mão na massa os leitores que nunca utilizaram a DriverLib da TivaWare podem pensar: “Ok, mas como eu adiciono esta funcionalidade ao meu projeto?”. Primeiramente será necessário instalar a TivaWare for C Series, este passo pode ser realizado através do link anterior.

 

Para criarmos um projeto temos basicamente dois caminhos: Criar um projeto do zero ou então nos basearmos em um exemplo já pronto e o adaptarmos. Bem, este trecho é uma atualização deste artigo, então aconselho a seguir o primeiro caminho. Ele pode ser mais longo inicialmente, mas com ele você pode criar um projeto base para todos os outros. O segundo método será um pouco mais rápido, mas pode trazer algumas instabilidades durante o processo de debug dos códigos.

 

Para o primeiro caminho aconselho que acessem este artigo escrito pelo Stéfano de Souza. Baixem a apostila e sigam o passo a passo. Este método é bastante interessante, em especial quando atualizamos a nossa TivaWare e o caminho da pasta acaba sendo alterado. Com a modificação de apenas duas variáveis do compilador resolvemos o problema. No meu GitHub você encontrará uma versão base e pode aplicar somente as modificações nas variáveis (existe uma explicação de como proceder as modificações).

 

O segundo caminho é o seguinte: Com o CCS aberto, clique com o botão direito dentro da “ProjecExplorer”. Após isso selecione “Import >> CCS Projects”. Clique em “Browse…” e procure a pasta onde a TivaWare foi instalada, dentro dela a pasta com exemplos e procure pela Launchpad, geralmente ela está dentro do seguinte diretório “C:\ti\TivaWare_C_Series-2.1.2.111\examples\boards\ek-tm4c123gxl”. Após selecionar essa pasta você terá uma tela semelhante à seguinte:

 

Exemplos fornecidos junto a TivaWare
Figura 9 - Importando exemplo de projeto

 

Note que este diretório pode variar, em especial a pasta da TivaWare em função da sua versão. Mesmo que estiver utilizando a Launchpad Stellaris (que não está na lista das placas disponíveis) você pode utilizar o exemplo referente à Launchpad Tiva C que funcionará sem problemas.

 

Você pode escolher qualquer projeto, entretanto, indico utilizar o “Project0. Após carregá-lo, renomeie o arquivo “project0.c” para “main.c”, após isso apagaremos os códigos antigos referentes ao exemplo deixando-o preparado para novos projetos. Se preferir copie e cole o código a seguir. Por fim você pode querer renomear este projeto para se tornar a base para outros, escolha o nome que julgar mais adequado.

 

 

Após ter preparado este projeto base, clique sobre o mesmo dentro da janela “ProjectExplorer” e realize um “copiar/colar”. Surgirá uma janela em que você escolherá o nome deste novo projeto, eu escolhi “Embarcados_01_blink_tivaware”. Pronto, você já tem o projeto preparado para nosso blink. Vamos aproveitar e já criar um projeto sem a TivaWare, para isso clique em “Project >> New CCS Project”. No target lembre-se de selecionar modelo “tm4c123gh6pm”, na grande maioria dos projetos funcionará bem para ambas launchpads. Em Connection” selecione “Stellaris In-Circuit Debug Interface”. Selecione o nome do projeto e clique em “Finish”. Agora nossos dois projetos estão preparados, Ufa!

 

O objetivo é demonstrar o quanto a TivaWare e bibliotecas do gênero podem facilitar nossa vida. Então listarei a seguir o código principal dos dois projetos, mas ao final postarei os códigos completos para que possam testar.

 

 

Versão sem a TivaWare:

 

 

O projeto pode ser baixado neste link.

 

 

Versão com a TivaWare:

 

 

O projeto pode ser baixado neste link.

 

Nota-se que utilizando a biblioteca para abstração do hardware nosso código fica significativamente mais curto e simples de ser entendido, além de tornar-se mais simples de ser portado para outro microcontrolador da família. Todas as etapas de configuração dos registradores foram isoladas do usuário que utiliza funções mais simples e em alguns casos com poucos argumentos.

 

Com relação ao uso do microcontrolador, a versão sem TivaWare utilizou 1.736 bytes de Flash e 536 bytes de RAM, enquanto a versão com TivaWare utilizou respectivamente 2.014 bytes e 280 bytes. A versão sem a biblioteca consumiu menos memória RAM já que endereços dos registradores provavelmente estão definidos como constantes, em compensação este fato leva a um maior consumo de Flash. O inverso aconteceu utilizando a biblioteca, o consumo de memória Flash foi superior e de RAM inferior.

 

 

Versão sem a TivaWare - Completa:

 

 

 

Versão com a TivaWare - Completa:

 

 

Caros leitores, chegamos ao final deste artigo apresentando algumas IDEs e ferramentas para Tiva C, que podem ser utilizadas em conjunto com a Launchpad Stellaris/Tiva. Fique à vontade para postar suas dúvidas ou sugestões.

 

No próximo artigo abordaremos os primeiros laboratórios propostos no curso, bem como dúvidas que mostram-se comuns no fórum do curso (Piazza). Obrigado e até a próxima.

 

 

Artigos da série "Shape the World"

 

Outros artigos da série

<< Shape The World - LaunchPad Tiva C TM4C123GShape The World - Capítulos 1 a 3 >>
Este post faz da série Shape The World. Leia também os outros posts da série:
NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Haroldo Amaral
Doutorando em Eng. Elétrica pela Poli-USP, mestre em Eng. Elétrica pela UNESP-Bauru e graduado em Tecnologia em Sistemas Biomédicos pela FATEC-Bauru.Um apaixonado por eletrônica que adora passar seu tempo "queimando alguns componentes" e escovando alguns bits. Entre outras paixões estão a música, uma boa reunião com os amigos, papear sobre tecnologia e afins.

Deixe um comentário

avatar
 
  Notificações  
Notificar