É 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:
Postar um comentário