mbed OS: Primeiros passos

Olá meu caro leitor, como vai? Nesse artigo trago mais uma novidade pra você que está procurando uma plataforma de desenvolvimento para aplicações embarcadas voltadas (mas não limitado apenas) para IoT, ou internet das coisas, o MBED OS. Já falei por aqui em posts anteriores sobre outros frameworks como o Zephyr (que inclusive estou devendo pra vocês o passo-a-passo de construir um driver personalizado, logo voltaremos lá), existem soluções estáveis como o Contiki OS e RIOT. E o que a ARM fez?  Resolveu pegar o seu conhecido framework de desenvolvimento online, juntou um kernel de tempo real, pilhas de comunicação e segurança e empacotou no que chamamos de MBED OS que em tradução livre se lê como algo parecido como: Sistema operacional MBED. 

 

Mas o MBED OS, é um RTOS com drivers?

 

Basicamente, mas a ARM foi mais além. O primeiro passo foi adicionar o suporte a operação multi-tarefa e para isso a fabricante recorreu a um velho conhecido, o kernel de tempo real da Keil, o RTX. Para quem não sabe, este é um sistema operacional de tempo real (relembrando, tempo real pois todas as suas seções executam código em tempo constante) que vem junto do Keil uVision. Por já ser um projeto estável e bem testado, a equipe MBED adicionou o porting para o RTX e estendeu suas chamadas em formas de classes, permitindo seu uso como objetos em C++.

 

Mas tem mais, a equipe Mbed resolveu trazer também toda a solução para comunicação de dispositivos, e trouxe toda sua pilha de networking, incluindo device drivers para rádios dos mais diversos fabricantes, tornando o pacote bem atrativo para o uso de aplicações para internet das coisas.

 

E não para por ai, o Mbed nasceu com o ideal de ser flexível, permitindo que o usuário utilize o compilador online mbed, mas que possa também debugar seu projeto com a sua toolchain favorita. Para isso ela fornece a versão offline do Mbed OS, o utilitário CLI, que como o nome sugere, é uma ferramenta de linha de comando, que permite que você crie, compile e exporte seu projeto usando o framework Mbed para as mais diversas IDE para processadores ARM do mercado, variando do padrão KEIL até alternativas grátis como GNU-ARM, tudo isso suportando Windows, Linux e MAC. Nesse artigo vamos demonstrar a a capacidade do Mbed OS em seu modo online, para facilitar a vida de todos os leitores e deixar o projeto independente de configuração do seu computador.

 

Quero usar o MBED OS! É fácil assim mesmo?

 

É muito simples utilizar o Mbed OS. A maneira mais fácil de começar a desenvolver suas aplicações é acessando o ambiente de desenvolvimento online clicando aqui. Configure um projeto com o template do Mbed OS, e você já pode utilizar todos os recursos fornecidos inclusive para as ferramentas de suporte mais populares. Atenção especial para o suporte a LPC4337 e a placa de expansão OM13070, a mesma placa fornecida para uso no Embarcados Contest, Conectando a Internet das Coisas com a NXP. Para mostrar a simplicidade de como se fazer algo, criei um pequeno código de demonstração, utilizando a placa do Contest e o acelerômetro que vem no shield OM13080, também fornecida para uso no concurso.

 

Para testar o exemplo, vamos ate o ambiente de desenvolvimento online,  clique em import, e na caixa de texto para buscar, digite meu nome (Felipe Neves) pra facilitar a busca, você deve ver o seguinte:

 

capture

 

De um duplo clique, e o projeto ira aparecer na sua workspace dessa forma:

 

capture

 

O código já contem todas as dependências envolvidas devidamente configuradas e pronto para compilação, mas antes vamos dar uma olhada no código principal, para isso, de um duplo clique em main.cpp, vamos nos deparar com o seguinte código:

 

 

Na sua workspace, clique em Compile ou utilize o atalho CTRL + D, isso irá compilar o programa e gerar um arquivo .bin, pronto para ser gravado na placa. Assim sendo, conecte a placa na porta USB do seu computador, procure o arquivo .bin copie, procure por uma unidade de disco com o nome de DAPLINK ou MBED ou CMSIS_xxx e cole o arquivo .bin. Aguarde o final do processo até que a placa desconecte e se reconecte automaticamente. Quando a unidade de disco reaparecer pressione o reset da placa no canto superior esquerdo, você devera ver o seguinte resultado:

 

 

 

Explicando rapidamente o código

 

O código desenvolvido é extremamente simples, mas demonstra um pouco do poder e da rapidez de desenvolvimento oferecido pelo Mbed OS. São instanciados dois objetos do tipo Thread, sendo uma para o acelerômetro e outra para o LCD da placa, um terceiro objeto do tipo Semaphore também é declarado pois sera útil para sincronizar as duas tasks. Na função main, pouco trabalho e realizado, no contexto de execução do Mbed OS a função main também e uma Thread com prioridade padrão do sistema (conhecida por osPriorityNormal). Assim as Threads criadas são executada. Reparem na simplicidade, uma única linha cria a Thread e dispara sua execução. Nesse momento main é suspensa e apenas as duas Threads ficam ativas, a Thread do lcd, configura o display da placa, renderiza algum texto, e pega um semáforo para aguardar uma ordem de execução.

 

A tarefa do acelerômetro configura a I2C. Um pouco de trabalho a mais foi exigido pois até o presente momento não existe um driver oficial para o bosch BMI160 que é o acelerômetro presente no shield, então para facilitar configurei o chip com funcionalidade minima. Assim, a cada 200ms, a tarefa do acelerômetro (que possui a prioridade mais alta do sistema) efetua a leitura dos eixos x, y,z, e guarda em um buffer, em seguida o semáforo criado e sinalizado, e a tarefa do acelerômetro suspende novamente por 200ms. Nesse momento a tarefa do lcd fica livre para rodar, e então ela pega dos dados do buffer do acelerômetro, formata e imprime no lcd, para que ela não fique tomando processamento toda hora. Uma vez que ela atualiza o display, novamente pega o semáforo do acelerômetro, até que este rode novamente e sinalize-o, repetindo o ciclo ate que o sistema seja desligado.

 

Conclusão

 

O Mbed OS veio para competir com grandes frameworks voltados para internet das coisas que já possuem muita estrada como  Contiki e RIOT, e também tem que enfrentar outros sistemas jovens que prometem ser um padrão da industria como o Zephyr. Nesse artigo falamos um pouco da composição do Mbed OS e demos alguns passos para que o leitor possa provar um pouco dessa ferramenta legal fornecida aos usuários de processadores ARM. Espero que o leitor tenha gostado e que mais esse recurso seja em breve aproveitado. Bons projetos!

 

Referências

 

Mbed OS: https://docs.mbed.com/

Mbed OS Handbook: https://docs.mbed.com/docs/mbed-os-handbook/en/5.1/

Outros artigos da série

Como utilizar as Threads no mbed OS >>
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.

Felipe Neves
Engenheiro de sistemas embarcados apaixonado pelo que faz, já trabalhou em diversos setores de tecnologia nos últimos 14 anos com destaque para Defesa, Automação, Agricultura, Wearables, Robótica e mais recentemente Semicondutores. Possui sangue maker, tendo paixão por construir e compatilhar suas próprias coisas e explorar novos sabores dentro do mundo "embedded". Atualmente trabalha como Engenheiro de Software Senior na Espressif, sim aquela do ESP32 e do ESP8266. Tem interesse em tópicos que envolvam Robótica, Controle de Movimento, DSP e Sistemas de Tempo Real.

1
Deixe um comentário

avatar
 
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Thiago Moreira Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Thiago Moreira
Visitante
Thiago Moreira

Será que posso criar meu próprio Hardware com MBed? Ou só dá pra usar nessas placas de desenvolvimento?