top of page

Além do Arduino #4: Sistemas operacionais embarcados

Foto do escritor: omni-electronicaomni-electronica

Nos últimos posts falamos basicamente de energização do sistema e foi muito importante! Mas chega disso e vamos falar da próxima grande coisa de além do Arduino: sistemas operacionais. 

É difícil dizer quantos Arduinos já foram vendidos no mundo. Até 2013 eram 700 mil unidades oficiais em todo mundo, mas as placas de Arduino são relativamente simples de se projetar e clonar, hoje em dia são muitos clones de diversos fabricantes, como as famosas Adafruit e Sparkfun. Além disso, muitos clones são produzidos na China, o que torna o custo muito inferior às placas originais Arduino. É possível pagar 10 reais por um. Esses números de vendas não são a toa. Arduino, tanto o hardware quanto software, possibilitou o uso muito mais facilitado de microcontroladores. Antes trabalhava-se munido de um datasheet de cerca de 1000 páginas e muita paciência para trabalhar com registradores, isso evoluiu para frameworks de softwares ou de fabricantes e hoje muitas bibliotecas já estão escritas e portadas para diversos MCUs distintos. O sucesso do Arduino então deu-se ao baixo custo, facilidade de programação e comunidade emergente. O Arduino é uma plataforma maravilhosa para se fazer projetos simples, pequenos,  com funcionalidades limitadas ou específicas; porém quando começamos a fazer projetos além do Arduino, muitos outros fatores e funcionalidades são necessárias e, neste caso, o Arduino nem sempre é a melhor solução. Por isso que dedico esse texto a tratarmos de um assunto sério em embarcados: sistemas operacionais.

Já tentou colocar o Arduino para dormir? Nos meus últimos dois artigos, falamos sobre operação Low Power da visão de sistema sustentável e da visão de otimizações, tanto de código quanto de hardware e no último comentei sobre modos de operação. Fazer um sistema dormir é uma tarefa complexa, passa a expor a real camada de hardware que existe em um Arduino. Algumas bibliotecas já existem para fazer isso por você, mas de qualquer forma, em projetos em que a temporização é importante são necessários testes, configurações de osciladores e conhecimento sobre os sistemas dentro do próprio hardware. Achou fácil? Então vamos direto ao ponto, que tal fazer o Arduino processar tarefas ao mesmo tempo (como um multithreading real time)? Ou então gerar inúmeros temporizadores concorrentes para realização de tarefas que são ordenadas e executadas em ordem gerada em tempo de execução? Pois é, fazer isso cruamente utilizando Arduino é impraticável. Não é coincidência que a programação Arduino é chamada de “bare metal”, ou seja, ele se comunica diretamente com o hardware, o que torna tarefas complexas mais desafiadoras. Para sanar esse problema, que é recorrente em projetos que vão além do Arduino, a utilização de sistemas operacionais para embarcados é necessária.


Sistemas operacionais provêm diversas funcionalidades em camada de software que são importantes para grandes projetos, como: temporizadores; eventos, sleep automático, ordem e prioridade de execução de tarefas, processamento de pacotes de rede quanto houver opção, e muitos outros que dependem de cada sistema. Para implementar um sistema operacional no seu embarcado, precisa-se abstrair seu hardware para “conectar” com a camada de abstração de hardware do sistema operacional, chamada de HAL. Mas não se desespere, os fabricantes muitas vezes fazem isso pra você e muitos sistemas operacionais já funcionam com muitos dispositivos distintos. A tabela 1, extraída do artigo “Operating Systems for Low-End Devices in the Internet of Things: a Survey” mostra uma comparação dos sistemas operacionais Low Power para Internet das Coisas mais famosos e, em seguida, explicaremos os termos de maior importância.



Architecture (Arquitetura):


Monolithic: trata-se de um sistema operacional completo, que já possui camada de abstração de hardware, gerenciamento de processos e memoria;Microkernel: onde o sistema operacional executa apenas as tarefas mínimas necessárias de um sistema, como agendamento de tarefas e abstrações básicas;RTOS: sistema operacional de tempo real.

Scheduler (agendador, gerenciamento de processos):

Cooperativo: quando tarefas são executadas até própria tarefa declarar seu fim ou liberar o sistema para realizar próxima tarefa;Preemptivo: onde as tarefas são ordenadas pelo processador;Tickless é um tipo de agendamento de tarefas que não precisa ser atualizado por ticks (intervalos pré-determinados), são executadas por agendamento de timers do processador.


Programming model (modelo de programação): 

Event-driven: trata-se de um modelo de programação de baixíssimo consumo, onde funções são executadas apenas quando eventos ocorrem e o processador está desligado o restante do tempo;Multi-thread: modelo de programação convencional onde cada thread executa uma tarefa de um processo, geralmente tem sincronização e execução contínua, assim como em programação em Linux, Windows ou MacOS;Protothread: é um tipo de thread porém com menor contexto para trocas rápidas de execução de thread, o que faz suas variáveis terem que ser armazenadas no heap de forma estática.

Target device class (classe de modelo ideal):

Segundo a RFC7228, existe uma nomenclatura para dispositivos de baixo consumo segundo a tabela abaixo:



Um programador de Arduino reconhece que o Arduino se encaixaria em classe 0 (zero). No próximo artigo de além do Arduino, vou falar um pouco sobre os dispositivos dessas diversas classes e auxiliar a escolher o seu componente ideal.


320 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page