// 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()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.
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.
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.
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.
#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
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.
02
Simulador
Controles y pantallas virtuales del SDK sustituyen al hardware que tu ordenador no tiene.
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.
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
Implementados y optimizados para consumir los mínimos recursos.
WRAPPERS DE FRAMEWORKS DE APPLE
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
// construye sobre exos

