# QuarkTS

QuarkTS es un sistema operativo embebido de código abierto multiplataforma para dispositivos de recursos restringidos que usa un planificador multitarea cooperativo. Este es distruibuido bajo la licencia MIT.

## Implementación

QuarkTS está diseñado para microcontroladores con recursos limitados, con un kernel pequeño y simple. Está escrito principalmente en el lenguaje de programación C para facilitar su portabilidad y mantenimiento, aunque también existe una versión escrita en C++11 (QuarkTS++), así como una librería para Arduino. QuarkTS no cuenta con instrucciones específicas a un hardware objetivo, lo que lo hace potencialmente portable a cualquier plataforma y/o compilador de C/C++.
El sistema operativo se construye sobre un planificador cuasiestático cooperativoen tiempo real basado en una arquitectura activada por tiempo e implementando un esquema Round-Robin especializado que usa una cadena enlazada y una cola de eventos para proporcionar una verdadera planificación con prioridades FIFO (First-In, First-Out). Este enfoque ofrece beneficios significativos sobre la planificación apropiativa, dado que las tareas gestionan su propio ciclo de vida, surgen menos problemas de reentrada y las tareas no son interrumpidas arbitrariamente por otras tareas, sino solo en puntos definidos por el programador. Esto permite a los usuarios construir software embebido multitarea, estable y predecible, orientado a eventos, sin tener que preocuparse por los problemas comunes de los enfoques concurrentes, como lidiar con recursos compartidos, las condiciones de carrera y los bloqueos.
El objetivo de diseño de QuarkTS es proporcionar funcionalidad mediante una implementación pequeña, simple y robusta, lo que lo hace ideal para microcontroladores con recursos limitados. En dichos entornos, un RTOS completamente apropiativo puede ser excesivo, introduciendo una complejidad innecesaria en el desarrollo de firmware. Debido a su tamaño y conjunto de características, QuarkTS está destinado a cerrar la brecha entre los RTOS completos y la programación bare-metal. QuarkTS está dirigido a desarrolladores embebidos que buscan más funcionalidad que la que ofrecen los programadores de tareas básicas, evitando al mismo tiempo el sobrecosto y la complejidad de un RTOS completo, pero proporcionando la robustez y seguridad típicas de sistemas más grandes.

#### Características claves

* Planificación cooperativa con prioridades
* Control temporizado ( Tareas temporizadas y temporizadores por software)
* Primitivas de comunicación entre tareas: Colas, notificaciones y Event-flags.
* Máquinas de estado ( incluye soporte jerárquico )
* Co-routines sin stack.
* Interfaz de línea de comandos AT (CLI)
QuarkTS también cumple en su mayoría con el estándar de codificación definido por la Motor Industry Software Reliability Association (MISRA) MISRA-C-2012/MISRA-C++:2008 y el SEI CERT C con el fin de proporcionar una base segura, confiable y protegida para aplicaciones embebidas.

## Arquitecturas soportadas

QuarkTS no tiene ninguna dependencia directa con el hardware, lo que permite que sea portable entre diferentes plataformas y compiladores de C/C++.
Los siguientes chips han sido verificados ejecutando QuarkTS exitosamente:
* ARM cores(ATMEL, STM32, LPC, Kinetis, Nordic and others)
* 8Bit AVR, 8051, STM8, RL78/Gxx
* HCS12, ColdFire, MSP430
* PIC (PIC24, dsPIC, 32MX, 32MZ)
* Arduino : soporta todas las arquitecturas (disponible desde el Gestor de Librerías)