ExOS

// sistema operativo posix embebido

ExOS: el sistema operativo de nueva generación para microcontroladores. Del prototipo de hardware al producto comercial en tiempo récord.

// la película · 4:02

Escribe firmware como software.

El equipo detrás de ExOS explica por qué lo creamos y muestra los productos que construimos: terminales de punto de venta, un videoportero, drones y el vehículo eléctrico Xkuty.

talk_to_us()
▪ Compatible POSIX▪ Independiente del hardware▪ 3 niveles de acceso al hardware▪ Memoria estática o dinámica▪ Xcode & Visual Studio▪ C · C++ · Objective-C

SEC 01 / por qué exos

De la idea al prototipo y al producto, sin empezar de cero.

Llevamos más de diez años diseñando hardware propio y para clientes. El paso más difícil es siempre el mismo: convertir una idea en un prototipo, y ese prototipo en un producto comercial viable. Cada plataforma que probamos obligaba a renunciar a algo.

ARDUINO / ARQUITECTURA SOFTWARE HARDWARE App Libs Periféricos Micro + simple− no portable− no apto para producto

01 / Plataformas sencillas

Plataformas como Arduino se aprenden rápido, pero sus IDEs y librerías propias te atan a una plataforma. Cuando necesitas más potencia o un micro más barato para producción, el código no viene contigo.

LINUX / ARQUITECTURA SOFTWARE HARDWARE App App App POSIX kernel SO completo Drivers Periféricos Micro + portable− complejo− hardware caro

02 / Linux

POSIX y portable, con red de alto nivel de serie. Pero necesita mucha más potencia y memoria, encarece cada unidad y pone el SO entre tú y cada pin del micro.

EXOS / ARQUITECTURA SOFTWARE HARDWARE App POSIX Drivers Kernel ExOS Periféricos Micro ACCESO DIRECTO + portable+ sencillo+ hardware ligero

03 / ExOS

El modelo POSIX y la portabilidad de Linux, con el tamaño de un kernel para microcontroladores, y acceso directo al hardware cuando lo necesites.

Hoy casi cualquier dispositivo habla con un móvil o un ordenador por USB, Wi-Fi o Bluetooth, y muchos llevan su propio servidor web. Hacerlo sobre micros desnudos es difícil. Con Linux es más fácil, pero lo pagas en consumo, memoria y coste de hardware, y aún tienes que escribir un driver para cada recurso que el SO no soporta.

Y luego están las herramientas: la app se escribe en un IDE, el firmware en otro, el código no se comparte y depurar en un micro es mucho más limitado que en un ordenador. Creamos ExOS para cambiarlo, para que te centres en tu dispositivo y no en aprender herramientas nuevas o probar hardware.

SEC 02 / características clave

01

Empieza sin hardware

ExOS es compatible POSIX, así que puedes escribir y probar el código del dispositivo en tu ordenador. Cuando funcione, compila el mismo código para la placa real: una placa comercial de prototipado o una diseñada por ti.

02

Sin atarte a ningún hardware

El soporte multiplataforma viene integrado. Elige hoy el micro que te conviene y cámbialo mañana sin reescribir tu código una y otra vez.

03

Memoria estática o dinámica

Cada llamada POSIX tiene su equivalente en ExOS que recibe memoria estática por referencia, algo esencial en micros con pocos recursos. USB, sockets, hilos y el resto funcionan de ambas formas, y puedes mezclarlas en el mismo programa.

04

Documentación que ya conoces

POSIX es el estándar detrás de Linux y macOS, e internet está lleno de tutoriales. El SDK de ExOS añade su propia documentación y tutoriales completos.

SEC 03 / hardware y servicios del so, a la vez

Tres niveles de acceso al hardware. Combínalos libremente.

ExOS es POSIX ante todo, pero nunca te deja fuera del hardware. Elige el nivel que necesita cada línea de código, dentro de la misma función.

NIVEL 01

Acceso directo al micro

GPIO, memoria y registros, sin ninguna capa de ExOS en medio. Ideal para acciones simples como activar un pin; este código es específico del micro.

GPIO · REGISTERS · MEMORY

NIVEL 02

Capa de abstracción de hardware

Llamadas multiplataforma para los periféricos básicos del micro, en pocas líneas. La capa sobre la que está construido ExOS.

RS232 · CAN · SPI · TIMERS · ADC

NIVEL 03

Servicios del sistema

Periféricos complejos y pilas de protocolos, programados igual que en un SO de escritorio. Un servidor TCP es el mismo código POSIX que escribirías en Linux.

SOCKETS · TCP/IP · USB · BLUETOOTH

Código real · LPC177x

Un servidor TCP hecho con servicios del SO recibe un byte, lo reenvía al bus CAN a través de la HAL y enciende un LED escribiendo directamente en el registro GPIO del micro mientras trabaja. Los tres niveles, en unas pocas líneas.

directoHALservicios del SO
#define LED1_MASK (1<<23) int main(){    // Initialize CAN bus through HAL API    hal_can_initialize(0, 250000, CAN_INITF_DISABLE_RETRANSMISSION);     int err;     // Create and set up sockets through OS Services API (dynamic, POSIX)    int server = socket(AF_INET, SOCK_STREAM, 0);    if (server >= 0)    {        struct sockaddr_in local = (struct sockaddr_in)        {            .sin_family = AF_INET,            .sin_addr.s_addr = INADDR_ANY,            .sin_port = htons(23)        };         if (-1 != bind(server, (struct sockaddr *)&local, sizeof(local)) &&            -1 != listen(server, 1))        {            while (1)            {                struct sockaddr_in remote;                socklen_t remote_len;                static unsigned char buffer;                 // Accept connection from network client (OS API)                int fd = accept(server, (struct sockaddr *)&remote, &remote_len);                if (fd == -1) break;                 // Activate GPIO3 pin on an LPC17xx micro (Direct access, no API)                LPC_GPIO3->DIR |= LED1_MASK;                 // Read value (1 byte)                size_t done = read(fd, &buffer, 1);                 // Send the same byte to the CAN bus (HAL API)                CAN_BUFFER data;                data.u8[0] = buffer;                hal_can_send((CAN_EP) { .Id = 0x200, .Bus = 0 }, &data, 1, CANF_PRI_ANY);                 close(fd);                 // Deactivate GPIO3 pin on an LPC17xx micro (Direct access)                LPC_GPIO3->DIR &= ~LED1_MASK;            }        }         err = errno;        close(server);    }}

SEC 04 / un solo entorno

La app y el firmware, en el mismo proyecto.

¿Por qué escribir la app de móvil o escritorio en Xcode o Visual Studio y luego cambiar a otro IDE para el hardware? El SDK de ExOS funciona dentro de Xcode y Visual Studio, así que la aplicación y el código del dispositivo viven en una misma solución.

Cuatro formas de ejecutar y depurar

  1. 01

    En tu ordenador

    El código que usa servicios del SO (sockets, puertos serie, USB) corre como POSIX en tu ordenador y luego compila para el dispositivo sin cambios.

  2. 02

    Simulador

    Controles y pantallas virtuales del SDK sustituyen al hardware que tu ordenador no tiene.

  3. 03

    Simulador + placa real

    En modo maestro-esclavo el simulador lee y escribe los periféricos de la placa real (LEDs, ADC y más) mientras la lógica corre en tu ordenador.

  4. 04

    En el dispositivo

    Cuando el hardware no se puede simular, el IDE ejecuta y depura directamente en la placa.

El SDK incluye además un asistente de configuración de placas que genera el BSP, incluso para placas que ExOS no conoce.

SEC 05 / librerías, drivers y servicios

Céntrate en tu idea. El resto ya está escrito.

La API POSIX completa (sockets, temporizadores, hilos, semáforos, locks, mutex, colas), más una versión con memoria estática de cada llamada y extras como un dispatcher de eventos. Y si falta un driver, añadirlo es sencillo.

USB

Teclado, ratón, webcams, impresoras, memorias USB, FTDI

Sistemas de ficheros

FAT, FAT32, JFS, ext2, NFS

Buses

RS232, RS485, CAN, SPI, I²C

Codecs

NTSC, PAL, MP3, MP4, AMR

Periféricos

Pantallas táctiles, ADC

Comunicación

Bluetooth, Ethernet, Wi-Fi, ZigBee

SERVICIOS DE RED

DHCPFTPHTTPSSHBonjourDNS

Implementados y optimizados para consumir los mínimos recursos.

WRAPPERS DE FRAMEWORKS DE APPLE

CoreFoundationCoreNetworkCoreGraphicsCoreBluetooth

Reutiliza en el dispositivo el mismo código de alto nivel en C, C++ y Objective-C de tus apps de macOS e iOS.

Hecho para accesorios de iPhone

iAP integrado.

ExOS incluye la librería del protocolo de accesorios de Apple (iAP). Abre el protocolo como un fichero y lee y escribe en el iPhone, iPad o iPod. Este ejemplo devuelve todo lo que envía el iPhone.

int main(){    // Open the iAP connection as if it were a serial device    int fd = open("dev/iap/com.miolabs.test_protocol", O_RDWR);     if (fd > 0)    {        char buffer[1024];        // If it's open, read the value sent from the iPhone        int done = read(fd, buffer, sizeof(buffer));        // Write it back to the iPhone        write(fd, buffer, done);         // And close the connection        close(fd);    }}

SEC 06 / kits de desarrollo

Tres placas para empezar. O usa la tuya.

Son las placas que usamos nosotros para prototipar rápido. ExOS no se limita a ellas: cualquier placa comercial puede ejecutarlo.

KIT 01

Kit Bluetooth

La TinyBLE: una placa pequeña con chip Bluetooth 4.0 LE, E/S de expansión, portapilas de botón y conector de bus. Crea iBeacons, mandos a distancia y más.

  • Placa TinyBLE
  • Placa de E/S: 2 relés, 6 entradas digitales/analógicas, 2 puertos RS232
  • Placa de sensores: temperatura y luz

KIT 02

Kit principal

Una placa con un amplio conjunto de periféricos y LCD táctil, conectable a las placas del kit Bluetooth.

  • RS232, RS485, CAN, USB, SPI, I²C
  • Bluetooth LE, Ethernet, Wi-Fi, 3G/GSM
  • LCD táctil y conector MFi* para accesorios Apple

KIT 03

Kit de vídeo y audio

Para trabajo intensivo como procesado de vídeo: captura y reproduce audio y vídeo, y se comunica con los otros kits.

  • Compresión y descompresión por hardware
  • Soporte OSD
  • Entradas/salidas PAL, NTSC y HDMI, Ethernet

* El chip MFi no está incluido: requiere registrarse en el programa MFi de Apple.

SEC 07 / conviene saber

No es un SO de escritorio, a propósito.

ExOS ejecuta una sola aplicación, no varias en paralelo, y no tiene ventanas ni exploración general de ficheros. Está a medio camino entre programar sobre un SO y programar el hardware directamente.

Incluso funciona en máquinas Intel x86. Tiene sentido cuando una sola aplicación necesita todos los núcleos (renderizar una escena 3D, por ejemplo), porque ExOS usa una fracción de los recursos de un SO de escritorio y soporta multinúcleo.

Lenguajes hoy

CC++Objective-C

SEC 08 / en producción

Ya funcionando en productos reales.

ExOS lleva años en desarrollo y funciona en productos ya en el mercado, como el vehículo eléctrico Xkuty One, cuyo firmware escribimos sobre ExOS.

Placa de desarrollo ExOS
Vehículo eléctrico Xkuty One

// construye sobre exos

¿Tienes un dispositivo en mente? Lo construimos contigo.