Contexto

O que é um microcontrolador?

Um microcontrolador é um sistema em um chip. Enquanto um computador é composto por vários componentes discretos, como um processador, RAM, armazenamento, uma porta Ethernet, etc., um microcontrolador tem todos esses tipos de componentes incorporados em um único "chip" ou pacote. Isso torna possível construir sistemas com menos peças.

O que você pode fazer com um microcontrolador?

Muitas coisas! Os microcontroladores são a parte central do que são conhecidos como "sistemas embarcados". Os sistemas embarcados estão em toda parte, mas geralmente você não os percebe. Eles controlam as máquinas que lavam suas roupas, imprimem seus documentos e preparam sua comida. Os sistemas embarcados mantêm os prédios onde você vive e trabalha em uma temperatura confortável e controlam os componentes que fazem os veículos nos quais você viaja pararem e seguirem em frente.

A maioria dos sistemas embarcados opera sem intervenção do usuário. Mesmo que eles tenham uma interface de usuário, como uma máquina de lavar roupa, a maior parte de sua operação é feita por conta própria.

Os sistemas embarcados são frequentemente usados para controlar um processo físico. Para que isso seja possível, eles possuem um ou mais dispositivos que informam sobre o estado do mundo ("sensores") e um ou mais dispositivos que permitem fazer alterações ("atuadores"). Por exemplo, um sistema de controle de clima de um prédio pode ter:

  • Sensores que medem temperatura e umidade em vários locais.
  • Atuadores que controlam a velocidade dos ventiladores.
  • Atuadores que fazem com que o calor seja adicionado ou removido do prédio.

Quando devo usar um microcontrolador?

Muitos dos sistemas embarcados listados acima poderiam ser implementados com um computador executando Linux (por exemplo, um "Raspberry Pi"). Por que usar um microcontrolador em vez disso? Parece mais difícil para desenvolver um programa.

Alguns motivos podem incluir:

Custo. Um microcontrolador é muito mais barato do que um computador de propósito geral. Além de ser mais barato, o microcontrolador também requer menos componentes elétricos externos para funcionar. Isso torna as Placas de Circuito Impresso (PCB) menores e mais baratas de serem projetadas e fabricadas.

Consumo de energia. A maioria dos microcontroladores consome uma fração da energia de um processador completo. Para aplicativos que funcionam com baterias, isso faz uma enorme diferença.

Responsividade. Para cumprir seu propósito, alguns sistemas embarcados devem sempre reagir dentro de um intervalo de tempo limitado (por exemplo, o sistema de freio "antibloqueio" de um carro). Se o sistema perder esse tipo de prazo, uma falha catastrófica pode ocorrer. Esse tipo de prazo é chamado de requisito de "tempo real rígido". Um sistema embarcado que está vinculado a esse prazo é chamado de "sistema de tempo real rígido". Um computador de propósito geral e um sistema operacional geralmente possuem muitos componentes de software que compartilham os recursos de processamento do computador. Isso torna mais difícil garantir a execução de um programa dentro de restrições de tempo rigorosas.

Confiabilidade. Em sistemas com menos componentes (tanto de hardware quanto de software), há menos coisas que podem dar errado!

Quando não devo usar um microcontrolador?

Onde computações pesadas estão envolvidas. Para manter seu consumo de energia baixo, os microcontroladores têm recursos computacionais muito limitados. Por exemplo, alguns microcontroladores nem mesmo possuem suporte de hardware para operações de ponto flutuante. Nesses dispositivos, realizar uma simples adição de números de precisão única pode levar centenas de ciclos de CPU.

Por que usar Rust e não C?

Espero não precisar convencê-lo aqui, pois você provavelmente está familiarizado com as diferenças entre as linguagens Rust e C. Um ponto que eu gostaria de mencionar é o gerenciamento de pacotes. C carece de uma solução oficial e amplamente aceita de gerenciamento de pacotes, enquanto Rust possui o Cargo. Isso facilita muito o desenvolvimento. Além disso, na minha opinião, o gerenciamento fácil de pacotes incentiva a reutilização de código porque as bibliotecas podem ser facilmente integradas a um aplicativo, o que também é algo positivo, pois as bibliotecas recebem mais "testes de batalha".

Por que não devo usar Rust?

Ou por que eu deveria preferir C em vez de Rust?

O ecossistema do C é muito mais maduro. Já existem soluções prontas para vários problemas. Se você precisa controlar um processo sensível ao tempo, pode adquirir um dos Sistemas Operacionais de Tempo Real (RTOS) comerciais existentes e resolver seu problema. Ainda não existem Sistemas Operacionais de Tempo Real em Rust que sejam comerciais e estejam em nível de produção, então você teria que criar um por conta própria ou experimentar um dos que estão em desenvolvimento. Você pode encontrar uma lista deles no repositório Awesome Embedded Rust.