Esse repositório é um template para criação de projetos baseados na placa EposMoteIII desenvolvida no Laboratório de Integração Software e Hardware filiado à Universidade Federal de Santa Catarina.
A intenção deste projeto é possibilitar o desenvolvimento de aplicações voltadas à placa EPOSMoteIII desenvolvida pelo LISHA sem o uso do projeto EPOS. A intenção por trás da remoção dessa camada é de permitir o uso deste hardware no processo de aprendizado da programação de sistemas embarcados, uma vez que neste processo é necessário criar um bom entendimento do funcionamento interno do hardware, sem tais abstrações.
Para tal, esse projeto utiliza as bibliotecas disponibilizadas pela própria fabricante para o microcontrolador no qual se baseia a placa, um CC2538 da Texas Instruments.
O projeto foi desenvolvido para uso com o editor Visual Studio Code com a extensão CMakeTools, de forma que quando aberto neste editor ele o configura da forma necessária utilizando o gerador recomendado para o CMake e com as configurações do Intellisense que otimizam sua utilização.
O uso deste editor não é obrigatório, porém o projeto foi concebido para ser utilizado nele, logo, para uso fora dele fazem-se necessárias algumas adaptações para utilizá-lo.
Como dito anteriormente, o EPOSMoteIII é baseado em um microcontrolador CC2538 da Texas Intruments, um poderoso chip baseado em uma arquitetura 32-bit Arm Cortex-M3 com uma memória flash de 512 kB, 32kB de RAM, suporte nativo a comunicação ZigBee, 6LoWPAN e IEEE 802.15.4 e clock de até 32 MHz.
A placa foi desenvolvida pelo LISHA de forma a ter o menor tamanho possível para ser utilizada principalmente em projetos de IoT. Alguns kits de expansão também foram desnevolvidos para ela, como o Smart Plug Module ou a Hydrologic Station Board.
Para mais informações a respeito do EPOSMoteIII ou dos kits de expansão, confira a documentação oficial no site do projeto no botão no topo desta página.
Para o uso deste projeto, não é necessária a instalação prévia de nenhum componente, uma vez que o instalador baixa todas as dependências.
Entretanto, conforme dito anteriormente, é recomendado o uso do editor Visual Studio Code. No momento da inicialização do instalador, será perguntado ao usuário se ele utilizará esse editor ou não.
Caso o usuário deseje utilizar esse editor, o instalador também baixará as extensões necessárias ao projeto.
Para instalar este projeto, basta utilizar o instalador incluso neste repositório, baixando este instalador e executando-o. Encerrado este processo, esse instalador exibirá um guia com orientações sobre o uso do projeto.
Caso esteja utilizando o Visual Studio Code com a extensão CMakeTools, ao abrir seu projeto haverá uma barra na parte inferior da janela parecida com a seguinte:
Nesta barra, há algumas opções importantes para o uso do projeto. A primeira delas é o botão de seleção de variante de build, responsável por determinar o nível de otimização do processo de compilação e inserir informações de debug no executável gerado.
Em geral, uma vez que não é possível depurar o EPOSMoteIII sem uma interface do tipo JTAG, não é necessário utilizar a variante Debug. Logo, deve-se usar na maioria dos casos a variante Release.
O botão seguinte é o de seleção de kit de desenvolvimento, responsável por selecionar o kit de desenvolvimento utilizado no processo de compilação.
Ao clicar neste botão, o seguinte menu aparece para selecionar o kit de desenvolvimento desejado. Uma vez que o EPOSMoteIII é baseado em uma arquitetura ARM, deve-se utilizar um kit arm-none-eabi.
O botão seguinte é o de build, responsável por iniciar o processo de compilação do projeto.
O último botão relevante a este projeto é o de seleção de alvo para build.
Ao clicar neste botão, o seguinte menu é exibido:
As duas opções mais importantes nesse menu são projeto e flash. A primeira é o alvo utilizado apenas para compilar seu programa, ou seja, esta opção apenas cria o executável. A segunda por sua vez faz o upload do executável para o EPOSMoteIII através do programa utilitário baixado pelo instalador deste projeto.
Após selecionado o alvo, deve-se pressionar o botão de build para realizar o processo selecionado, seja ele o de compilação ou o de flash.
Junto com este projeto, é incluso um programa simples que faz o LED on-board do EPOSMoteIII piscar que pode ser usado para testar as funções de upload do executável e analisar a estrutura do projeto que será explicada no tópico seguinte.
Para fazer upload deste exemplo para sua placa, siga os seguintes passos (que também se aplicam para seus projetos futuros baseados nesse template):
-
Crie uma cópia da pasta Projeto-VSCode-EPOSMoteIII.
-
Renomeie esta nova pasta para o nome que deseja dar ao seu projeto.
-
Abra essa nova pasta no Visual Studio Code.
-
Selecione o kit de desenvolvimento ARM (arm-none-eabi).
-
Selecione a variante de build Release.
-
Selecione o alvo flash.
-
Clique em build (Com a placa ainda desconectada do computador).
-
Siga as instruções na janela do programa de flash.
Este projeto é dividido em alguns componentes, que serão explicados individualmente a seguir:
Este diretório contém um único arquivo responsável por selecionar o gerador desejado para o CMake e configurar o projeto para salvar as alterações feitas sempre que um comando build for lançado, de forma a prevenir a perda de alterações feitas no projeto por esquecer de salvar manualmente.
Caso deseje alterar estes comportamentos ou adicionar alguma configuração extra ao editor, sinta-se a vontade para customizar este arquivo livremente. Para guiá-lo neste processo, há uma extensa documentação da Microsoft sobre as configurações possíveis e seus respectivos comandos na internet. Divirta-se 😁
Este é o diretório no qual vivem dois dos arquivos mais importantes em seu projeto: main.c e startup_gcc.c.
O primeiro é onde fica sua função main, ponto de entrada de qualquer aplicação. Já o segundo é onde são configuradas as interrupções e timers utilizados no seu projeto, além de outras configurações da memória às quais não cabe explicação aqui.
Este é o diretório criado pelo CMake onde será armazenado o executável do seu programa.
Este diretório é criado e alterado pelo CMake e sua única preocupação com ele deve ser excluí-lo em algumas situações para remediar alguns erros que pode encontrar.
Casos em que se deve excluir a pasta build
-
Erros que não fazem sentido estão sendo encontrados no seu projeto (includes corretos, erros já corrigidos, etc).
-
Foram feitas alterações nas configurações do CMake e elas não parecem estar surtindo efeito.
-
Foi escolhido um outro compilador ou gerador do CMake.
Neste diretório vive o arquivo arm-none-eabi-toolchain.cmake (nome grande eu sei, mas juro que ele é bem explicativo pra quem sabe o que significa), responsável por configurar o script CMakeLists.txt para cross-compiling para arquitetura ARM.
Este é um dos diretórios que não precisam ser alterados na maioria dos projetos e devem ser feitos somente por usuários com um entendimento médio ou avançado de programação, uma vez que as configurações feitas nele são essenciais para o projeto.
Este diretório é onde devem ser colocados os headers que forem criados em seu projeto. O arquivo CMakeLists.txt incluso está configurado para definir este diretório como uma das fontes de include do projeto.
Dessa forma, todos os arquivos .h diretamente neste diretório podem ser incluídos em outras partes do projeto sem especificar o caminho completo para eles. Ou seja, no exemplo incluso,
#include <meu_codigo.h>
é completamente funcional em qualquer parte do projeto, uma vez que este arquivo vive na raíz do diretório include.
Este diretório é onde devem ser colocados os arquivos de código fonte que forem criados em seu projeto. O arquivo CMakeLists.txt incluso está configurado para compilar todos os arquivos .c ou .cpp presentes aqui.
Dessa forma, os arquivos .h criados na pasta include podem ter as definições de suas funções nos arquivos .c nesta pasta. No exemplo incluso, o arquivo meu_codigo.c define as funções declaradas em meu_codigo.h
Este diretório é onde ficam os dois arquivos utilitários usados pelo projeto. O primeiro é o linker.ld, responsável por mapear as regiões de memória para o processo de linking da compilação. O segundo é o bootloader.c, um arquivo com funções utilizadas para o processo de bootloader (necessário para que se possa fazer flash de um novo programa sem o uso de uma interface como uma JTAG).
Não é necessário alterar nada neste arquivo, tudo já está configurado para funcionar com o EPOSMoteIII. Entretanto, aqueles que possuem mais experiência com programação voltada a sistemas embarcados, devem sentir-se a vontade para alterar estes arquivos da forma que julgar melhor. A propósito, caso o faça, fique a vontade para sugerir a alteração neste repositório, criando uma nova pull request.
Este arquivo vive na raíz do projeto e é responsável por configurar o CMake para compilar e fazer o flash deste projeto corretamente.
Este arquivo está configurado propriamente e poucas alterações cabem aos usuários, a principal delas é a seguinte linha:
# Compiler warnings
set(MY_COMPILER_FLAGS
-mthumb -mcpu=cortex-m3 -mfloat-abi=soft
-ffunction-sections -fdata-sections -Wall
-Wextra -pedantic -MD -fno-exceptions -fno-rtti
)
Este trecho é responsável por definir os warnings usados na compilação e podem ser ajustados às preferências do usuário (à exceção dos 3 primeiros, específicos da plataforma alvo).