O que é o RTOS NuttX e por que você deve se importar?

Existem inúmeros Sistemas Operacionais de Tempo Real (RTOS na abreviação em inglês) disponíveis na Internet (veja uma "pequena listagem” aqui). Muitos destes RTOS’s, contudo, são projetos que já deixaram de existir ou não estão mais sendo mantidos.

 

Dos demais RTOS’s, que continuam sendo desenvolvidos, a maioria só suporta um único microcontrolador ou uma única família de microcontroladores. Filtrando ainda mais, nota-se que mesmo os poucos sistemas operacionais de tempo real que suportam múltiplos microcontroladores não possuem todos os recursos que as empresas e desenvolvedores precisam, como: USB, Ethernet, Wi-Fi, 6LoWPAN, LCD gráfico, SD Card, Sistema de Arquivo FAT, barramento CAN, RS485, etc.

 

Já o sistema operacional de tempo real NuttX suporta todos esses recursos citados acima (e muito mais), além de suportar várias arquiteturas de microcontroladores e microprocessadores: AVR; ARM (ARM7, ARM9, ARM11, Cortex A8/A9, Cortex M0/M3/M4/R4); HC11/12; LM32; MIPS; M16C; RISC-V; SH1; X86; Xtensa LX6; Z16; Z80.

 

Se seu projeto precisar usar um cartão SD Card com um sistema de arquivos FAT, você não precisará portar e depurar ("debugar") o FATFS para usar com seu projeto. O mesmo vale para outros recursos como ModBus, Micropython, etc. Tudo já está devidamente integrado no sistema e você não pagará nada por isso. Isso mesmo, o NuttX é um RTOS complemente livre sob licença BSD, open-source e gratuito.

 

Não tem pegadinhas, não tem restrições de uso, não tem licença GPL com exceções. A licença GPL funciona muito bem para aplicações desktop, mas para aplicações em dispositivos embarcados ela pode ser problemática, uma vez que torna-se difícil manter partes do código fonte proprietário misturado com código fonte aberto.

 

Talvez por este motivo o próprio Google está criando seu sistema operacional Fuchsia utilizando a licença BSD. Assim as fabricantes de dispositivos que usarem esse sistema não correm o risco de serem processados na justiça por não cumprirem as obrigações definidas na licença GPL (usada no kernel do Linux).

 

Características do NuttX

 

O NuttX é um sistema operacional de tempo real que segue o padrão POSIX. Isto significa que você não precisa aprender uma nova API para criar seus programas. Você pode escrever sua aplicação num sistema operacional POSIX como o Linux ou o MacOS, validar seu funcionamento e então basta recompilar para utiliza-la no NuttX. Você também não precisará criar sua aplicação partindo do zero, pois poderá utilizar algumas das pequenas bibliotecas disponíveis pra Linux e apenas fazer poucas modificações para compilá-las no NuttX.

 

O NuttX possui muitos subsistemas que se assemelham aos subsistemas existentes no Linux. Por exemplo: Virtual File System (VFS), Memory Technology Device (MTD), subsistema de Áudio, subsistema USB com suporte à USB composto (USB Composite: uma única porta USB funcionando como múltiplos dispositivos ao mesmo tempo) e muitos outros subsistemas. A principal diferença do NuttX em relação ao Linux é o tamanho do sistema, o NuttX é muito pequeno. Um sistema NuttX básico vai rodar com menos de 32KB de Flash e menos de 8KB de RAM. Claro, se você quiser incluir mais recursos como USB, Ethernet, WiFi, IPv6, CAN, etc, é melhor você usar um microcontrolador com mais de 64KB de Flash e ao menos 32KB de RAM.

 

Todos estes fatos explicam porque muitas fabricantes já estão utilizando o NuttX (inclusive aqui no Brasil). Você já ouviu falar do smartphone modular Motorola Moto Z? Nele, o usuário pode colocar capas inteligentes (chamadas de Snaps ou Mods) transformando seu smartphone em um projetor multimídia, ou uma câmera com Zoom ótico, ou um sistema de som, ou qualquer outra função que ele queira. Talvez você não saiba, mas estas capas inteligentes estão rodando NuttX internamente. Além da Motorola, a Sony está usando o NuttX nos seus gravadores de áudio digital, headphones bluetooth (a Sony apresentou seus dispositivos com NuttX na Embedded Linux Conference de 2017). Outra grande empresa que está usando o NuttX é a Samsung; sim o NuttX (ou melhor, um fork dele) é utilizado no TizenRT. Infelizmente a Samsung mudou a licença do código fonte NuttX de BSD para Apache e nunca contribuiu de volta com as melhorias que eles fizeram (como a adição de Journaling no sistema de arquivos SmartFS do NuttX).

 

Outras empresas não tão conhecidas também estão utilizando o NuttX: a 3DRobotics utiliza o NuttX nos seus drones (ou veículos aéreos não tripulados para evitar confusão com drones militares) que são desenvolvidos com o sistema PX4; a Haltian utiliza o NuttX nos seus dispositivos IoT como o ThingSee One. Aqui no Brasil o NuttX já é utilizado por uma conhecida fabricante de impressoras fiscais.

 

Apesar de pouco conhecido da grande mídia, o NuttX não é um RTOS novo. A primeira versão foi liberada há mais de 10 anos (em Fevereiro de 2007). O criador do NuttX é o senhor Gregory Nutt (daí a origem do nome NuttX). O Greg trabalhou durante muitos anos com sistemas embarcados na indústria aeroespacial e também na HP, onde desenvolveu o sistema de tempo real usado nas impressoras. Também trabalhou desenvolvendo sistemas embarcados com Linux em várias empresas (ex.: AMD, ATI, Motorola, etc) e foi o co-fundador de uma empresa de desenvolvimento de sistemas embarcados com Linux no início dos anos 2000. Quando ele percebeu que não havia nenhum RTOS POSIX open-source, resolveu colocar toda sua experiência no desenvolvimento do NuttX.

 

Gregory Nutt: criador do NuttX
Figura 1 - Gregory Nutt: criador do NuttX

Mas então por que você nunca ouviu falar no NuttX até hoje? É simples: o Greg estava mais preocupado em tornar o NuttX o melhor sistema operacional disponível para microcontroladores de baixo custo ao invés de ficar fazendo propaganda. Felizmente, por seus próprios méritos, o NuttX está se tornando cada vez mais conhecido e utilizado, graças à qualidade do sistema e aos inúmeros recursos que ele possui. Por exemplo, a recente adição do suporte a 6LoWPAN torna o NuttX uma ótima opção para dispositivos IoT complexos onde recursos de comunicação mais sofisticados são necessários.

 

Como começar a usar o NuttX

 

E então, gostou de conhecer o NuttX? Quer aprender a usá-lo? Existem vários tutoriais espalhados pela Internet, links podem te ajudar:

Mas a forma mais simples é seguir os vídeo tutoriais (em inglês) que o Alan Carvalho de Assis está criando no NuttX Channel.

E em breve também estará disponível uma versão do canal em Português aqui.

 

Para seguir os vídeo tutoriais você só precisará de uma plaquinha BluePill (STM32F103 Minimum) que custa menos de U$ 2:

Placa BluePill com STM32F103
Figura 2 - Placa BluePill

 

E de um programador ST-Link V2 que também custa menos de U$ 2:

Programador ST-Link V2
Figura 3 - Programador ST-Link V2

 

Se você possuir uma das mais 150 placas suportadas pelo NuttX poderá utiliza-la, mas terá que adicionar algumas linhas de código para indicar quais dispositivos deseja inicializar. Estes dispositivos já estão inicializados na placa stm32f103-minimum, pois ela é a placa de baixo custo usada nos vídeo tutoriais.

 

Um agradecimento especial ao Djames Suhanko, Marcelo Barros e Fábio Souza  que deram apoio para a escrita desse artigo.

 

Referências

 

What is the NuttX RTOS and why should you care?

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.

Alan Carvalho de Assis
Mestre em Engenharia Elétrica pela UFRGS; Formado em Computação Sistemas de Informação pela UnilesteMG; Técnico em Informática Industrial pela ETVA. Começou trabalhando com Linux Embarcado (uClinux) em 2001 e em 2010 começou a desenvolver com o NuttX RTOS. Atualmente é um desenvolvedor/contribuidor do NuttX e tem um empresa de consultoria chamada Keenix Tech.

11
Deixe um comentário

avatar
 
6 Comment threads
5 Thread replies
4 Followers
 
Most reacted comment
Hottest comment thread
7 Comment authors
Claudio KundeTulio MunizAllef AraujoCaio PereiraJeronimo Filho Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Claudio Kunde
Visitante
Claudio Kunde

Com sua experiência Alan, qual seria a grande diferença ou vantagem entre NuttX e FreeRTOS? Abraço!

Tulio Muniz
Visitante
Tulio Muniz

Olá Alan, muito bom seu post. Eu estou fazer funcionar o Nuttx em um Teensy3.2 com suporte a rede usando um ENC28J60. Já tentei fazer mapeamento dos pinos SPI em ~/nuttx/configs/teensy-3.x/include/board.h, mas ainda estou penando, você poderia me dá uma diga sobre onde estou errando, pois até agora não consegui fazer a interface funcionar.

Grato pela atenção.

Allef Araujo
Visitante
Allef Pablo Araujo

Parabéns Alan! Comecei a ver também os vídeos no Youtube e estou acompanhando o grupo que você criou no LinkedIn. O material está excelente!.Muito bom trabalho!

Caio Pereira
Visitante
Caio Pereira

Parabens Alan!
Muito legal ver um artigo seu no Embarcados. Conheci o Nuttx atraves do seu blog (meados de 2011 eu acho...).

Jeronimo Filho
Visitante
Jeronimo Filho

Parabens Alan !! Mais um passo para a popularização do NuttX !

Cleiton Bueno
Visitante
Cleiton Bueno

Muito bom ler sobre NuttX aqui no Embarcados, e a primeira vez que li sobre ele foi em seu blog Alan, parabéns! E espero ler mais sobre NuttX por aqui.

Um abraço.