quarta-feira, janeiro 29, 2020

Arduino Nano 33 BLE: Uma Primeira Olhada Embaixo do Capô

É comum vermos "plaquinhas" anunciando que são "programáveis com a IDE do Arduino".  Vamos ver um pouco o que é isto e como foi feito no caso do Arduino Nano 33 BLE


A IDE Arduino

A IDE ("Ambiente Integrado de Desenvolvimento" do Arduino é relativamente simples comparada com as IDEs mais profissionais (Visual Studio, Eclipse, Android Studio, etc). Parte desta simplicidade é uma vantagem, pois diminui a curva de aprendizado.

Ela tem um editor bem simples (que amamos odiar) e um sistema de geração de código bastante ineficiente. O seu sketch é massageado por um pré-processador, compilado por um compilador C++ (junto com bibliotecas e, em muitos casos, o runtime), linkado e convertido para o formato adequado para a carga na placa (que é feita por um utilitário externo).

Portanto para uma placa ser suportada pela IDE é preciso que a IDE conheça os passos de geração e carga do código e tenha as ferramentas e runtime apropriados.

"API Arduino"

O que estou chamando de runtime é um conjunto de módulos que implementam a iniciação da placa e a série de funções que quem programa para Arduino já conhece de cor: pinMode, digitalRead, etc. Este conjunto de funções é a "API Arduino", e se origina do projeto Wiring que antecede ao Arduino. Implementada corretamente para cada placa, os programas que se restringem a esta API provavelmente funcionarão em todas as placas.

No caso das placas baseadas no ATmega (os, digamos, Arduinos "clássicos") as ferramentas usadas vem do avr-gcc toolchain e todo runtime foi escrito diretamente sobre o hardware.

O runtime no Nano 33 BLE

Aqui a coisa complica um pouco. O processador é bem mais complexo (o que significa que iniciação e bootloader são bem mais complicados) e o suporte (decente) a Bluetooth requer um código não trivial e muito tempo para validação.

É, portanto, natural que a Arduino tenha decidido não escrever diretamente sobre o hardware, mas aproveitar um runtime já existente e depurado. A escolha deles (como descrito aqui) foi pelo Mbed OS. O Mbed OS é um sistema operacional de tempo real para dispositivos baseados em processadores ARM Cortex-M.

O sketch Arduino é compilado no formato de uma aplicação Mbed OS. Uma camada desenvolvida pela Arduino implementa a API Arduino como chamadas a funções do Mbed OS. É claro que estas camadas adicionais por cima do hardware impactam o desempenho, mas o clock do Nano 33 BLE é algo suficiente para não comprometer os usos mais comuns do Arduino (e a implementação da API no ATmega também não é tão eficiente).

Um ganho adicional é que isto permite ao sketch Arduino chamar outras funções do Mbed OS (é claro que aí não vai rodar em outras placas).

Por outro lado, surge a pergunta do porque usar a IDE e API do Arduino ao invés de usar direto as ferramentas e APIs do MbedOS. A resposta é a facilidade inicial de uso, o aproveitamento das incontáveis aplicações Arduino já existentes e a esperança de uma migração simples para outras placas suportadas pela IDE Arduino.

O meu próximo passo vai ser explorar um pouco os recursos do Mbed OS no Nano 33 BLE.

Nenhum comentário: