Depois de um ano de desenvolvimento, a versão 5.1 do RT-Thread, um sistema operacional em tempo real (RTOS) para dispositivos de Internet das Coisas, está disponível. O sistema está em desenvolvimento desde 2006 pela comunidade de desenvolvedores chineses e atualmente está portado para 154 placas, chips e microcontroladores baseados nas arquiteturas x86, ARM, MIPS, C-SKY, Xtensa, ARC e RISC-V. A versão minimalista do RT-Thread (Nano) requer apenas 3 KB de Flash e 1,2 KB de RAM para funcionar. Para dispositivos IoT com recursos mais robustos, está disponível uma versão completa que suporta gerenciamento de pacotes, configuradores, pilha de rede, pacotes com implementação de interface gráfica, sistemas de controle por voz, bancos de dados, serviços de rede e motores para execução de scripts. O código é escrito em C e distribuído sob a licença Apache 2.0.
O sistema operacional é composto por três camadas básicas:
- O núcleo, que garante a execução de tarefas em tempo real. O núcleo fornece primitivas básicas universais que cobrem áreas como gerenciamento de bloqueios e sincronização de dados, escalonamento de tarefas, gerenciamento de threads, tratamento de sinais, filas de mensagens, gerenciamento de temporizadores e gerenciamento de memória. Especificidades de hardware são implementadas nos níveis libcpu e BSP, que incluem os drivers e códigos necessários para suporte ao CPU.
- Componentes e serviços que operam sobre o núcleo e oferecem abstrações, como sistema de arquivos virtual, sistema de tratamento de exceções, armazenamento no formato chave/valor, interface de linha de comando FinSH, pilha de rede (LwIP) e estruturas de rede, bibliotecas para suporte a dispositivos, subsistema de áudio, pilha sem fio, componentes para suporte a Wi-Fi, LoRa, Bluetooth, 2G/4G. A arquitetura modular permite conectar componentes e serviços de acordo com as necessidades e recursos de hardware disponíveis.
- Pacotes de software. Componentes de software de uso geral e bibliotecas de funções são distribuídos e instalados na forma de pacotes. Atualmente, o repositório inclui mais de 450 pacotes que oferecem desde interfaces gráficas, aplicativos multimídia e aplicativos de rede até sistemas de controle de robôs e manipuladores baseados em aprendizado de máquina. Os pacotes também incluem mecanismos para organizar a execução de programas nas linguagens Lua, JerryScript, MicroPython, PikaScript e Rust (rtt_rust).

Características da plataforma:
- Suporte a arquiteturas:
- ARM Cortex-M0/M0+/M3/M4/M7/M23/M33 (suporte a microcontroladores de fabricantes como ST, Winner Micro, MindMotion, Realtek, Infineon, GigaDevic, Nordic, Nuvoton, NXP).
- ARM Cortex-R4.
- ARM Cortex-A8/A9 (NXP).
- ARM7 (Samsung).
- ARM9 (Allwinner, Xilinx, GOKE).
- ARM11 (Fullhan).
- MIPS32 (Loongson, Ingenic).
- RISC-V RV32E/RV32I[F]/RV64[D] (sifive, Canaan Kendryt, bouffalo_lab, Nuclei, T-Head, HPMicro).
- ARC (SYNOPSYS)
- DSP (TI).
- C-Sky.
- x86.
- Arquitetura modular expansível, permitindo a criação de um ambiente adequado para sistemas com recursos limitados (requisitos mínimos — 3 KB de Flash e 1,2 KB de RAM).
- Suporte a várias interfaces padrão para desenvolvimento de software, como POSIX, CMSIS, API C++. Uma camada RTduino está sendo desenvolvida separadamente para compatibilidade com APIs e bibliotecas do projeto Arduino.
- Capacidade de extensão através do sistema de pacotes e componentes plug-in.
- Suporte para desenvolvimento de aplicações para processamento de informações de alto desempenho.
- Sistema de gerenciamento de energia flexível, permitindo que o dispositivo entre automaticamente em modo de suspensão e gerencie dinamicamente a voltagem e a frequência com base na carga.
- Suporte a hardware para criptografia e decriptação, fornecendo bibliotecas com vários algoritmos criptográficos.
- Interface unificada para acessar dispositivos periféricos e equipamentos adicionais.
- FS virtual e presença de drivers para sistemas de arquivos como FAT, UFFS, NFSv3, ROMFS e RAMFS.
- Pilha de protocolos para TCP/IP, Ethernet, Wi-Fi, Bluetooth, NB-IoT, 2G/3G/4G, HTTP, MQTT, LwM2M etc.
- Sistema de entrega e instalação remota de atualizações, suportando criptografia e verificação por assinatura digital, reinício de instalação interrompida, recuperação de falhas, reversão de alterações etc.
- Um sistema de módulos do núcleo carregados dinamicamente, que permite compilar e desenvolver componentes do núcleo separadamente e carregá-los dinamicamente conforme necessário.
- Suporte a vários pacotes de terceiros, como Yaffs2, SQLite, FreeModbus, Canopen, entre outros.
- Possibilidade de compilação direta do pacote BSP (Board Support Package) com componentes para suporte a uma plataforma de hardware específica e seu carregamento na placa.
- Disponibilidade de um emulador (BSP qemu-vexpress-a9), permitindo o desenvolvimento de aplicativos sem utilizar placas reais.
- Suporte a compiladores padrão e ferramentas de desenvolvimento, como GCC, MDK Keil e IAR.
- Desenvolvimento do ambiente integrado de desenvolvimento RT-Thread Studio IDE, permitindo criar e depurar aplicativos, carregá-los em placas e gerenciar configurações. Plugins para desenvolvimento de programas para RT-Thread também estão disponíveis para Eclipse e VS Code.
- Existência de uma interface de console Env, facilitando a criação de projetos e a configuração do ambiente.
Entre as mudanças na nova versão:
- No RT-Smart, um sistema operacional híbrido baseado no RT-Thread que separa aplicativos do núcleo, o suporte aos mecanismos epoll, eventfd, signalfd, timerfd e select é habilitado por padrão. Um subsistema para emulação de terminal foi implementado. O suporte para dispositivos DFZU2EG MPSoC e cv181x-riscv foi adicionado.
- No RTduino, uma camada para garantir compatibilidade com o ecossistema Arduino, foi adicionado suporte para as placas raspberry-pico, stm32h503-st-nucleo, stm32h563-st-nucleo, stm32f412-nucleo e stm32f407-rt-spark.
- Componentes de terceiros, como ssh, sftp, weston e vim, foram atualizados.
- Foi adicionado suporte para novas placas e chips, como HPMicro RISC-V, STM32 Nucleo, Adafruit Metro M4, Seeed Wio-Terminal, ST (stm32L431_tencentos, stm32h7s7-disco, stm32f407-lckfb-skystar, stm32h503-st-nucleo), Renesas (ek-ra8m1, ek-ra8d1, ra8d1-vision-board), AT32 (at32f402-start, at32f405-start), HT32 (ht32f52352, ht32f12366, AVR32 at32uc3a0256, at32uc3b0256), CVITEK (c906_little, cv18xx_risc-v), WCH (yd-ch32v307vct6), HC32 (ev_hc32f4a0_lqfp176, ev_hc32f460_lqfp100_v2), (ev_hc32f448_lqfp80, GD32 gd32407v-lckfb), NXP (frdm-mcxn947, frdm-mcxa153).
- A operação dos escalonadores de tarefas e do CPU foi otimizada. Foi adicionada uma camada para abstrair o escalonador rt_sched.
- A otimização do funcionamento em sistemas multinúcleos foi realizada.
- Foi disponibilizada a capacidade de conectar manipuladores às operações de alocação de memória malloc.
- O suporte para rastreamento reverso (backtrace) do núcleo foi implementado para as arquiteturas ARM64 e RV64.
- Foi continuada a transição para um novo modelo de drivers de dispositivos.
- Nos drivers virtio qemu-virt64-aarch64 e qemu-virt64-riscv, o suporte para SDL2 foi adicionado.
- Um framework para desenvolvimento de drivers clk foi adicionado.
- Na DFS, a configuração exfat foi adicionada. O núcleo foi por padrão implementado para usar o sistema de arquivos dfsv2.
- O suporte para terminais TTY foi aprimorado.
- O sistema de entrada/saída agora suporta as flags O_DIRECT e O_SYNC.
- Na implementação de processos leves lwP (Lightweight Process), a função wp_new foi substituída por lwp_create. Foi adicionada a função sys_setitimer.
- No gerenciador de memória MM, foi adicionada a suporte à reserva de memória e implementada a função rt_aspace_mremap_range.
- Na Libcpu, foi adicionada a suporte para os processadores ARM Cortex-M85 e Cortex-R52.
Fonte: opennet.ru
