QuarkTS

Información general
Tipo de programa|  Sistema operativo de tiempo real
Desarrollador|  Juan Camilo Gómez Cadavid
Modelo de desarrollo|  Código abierto
Lanzamiento inicial|  2006
Licencia|  MIT
Estado actual|  Activo
Información técnica
Plataformas admitidas|  ARM (ARM7, ARM9, Cortex-M0, -M0+, -M1, -M2, -M3 -M4, -M7, -A, -R4), Atmel AVR, AVR32, HCS12, MicroBlaze, Cortus (APS1, APS3, APS3R, APS5, FPF3, FPS6, FPS8), MSP430, PIC, dSPIC, Renesas H8/S, SuperH, RX, x86, 8052, Coldfire, V850, 78K0R, Fujitsu series MB9
Estándares|  MISRA-C 2012/MISRA-C++ 2008/SEI CERT C
Motor|  Micro-kernel de tiempo real cooperativo
Versiones
Última versión estable|  7.3.3 ()
Enlaces

Sitio web oficial

Repositorio de código

[editar datos en Wikidata]

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

## Implementación

[editar]

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++[3]​), 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++.[1]​[2]​

El sistema operativo se construye sobre un planificador cuasiestático cooperativo[4]​[5]​en tiempo real basado en una arquitectura activada por tiempo[6]​ 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[7]​. 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.[8]​

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[9]​. 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

[editar]

* 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[10]​ y el SEI CERT C con el fin de proporcionar una base segura, confiable y protegida para aplicaciones embebidas.

## Arquitecturas soportadas

[editar]

QuarkTS no tiene ninguna dependencia directa con el hardware, lo que permite que sea portable entre diferentes plataformas y compiladores de C/C++[1]​.

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)

## Referencias

[editar]

1. ↑ a b c G.C, J. Camilo (10 de octubre de 2024), kmilo17pet/QuarkTS, consultado el 10 de octubre de 2024 .
2. ↑ a b «QuarkTS OS». kmilo17pet.github.io. Consultado el 11 de octubre de 2024.
3. ↑ «QuarkTS++ OS». github.com. Consultado el 11 de octubre de 2024.
4. ↑ Cortadella, Jordi; Kondratyev, Alex; Lavagno, Luciano; Passerone, Claudio; Watanabe, Yosinori (2002). «Quasi-Static Scheduling of Independent Tasks for Reactive Systems». En Esparza, Javier, ed. Application and Theory of Petri Nets 2002 (en inglés) (Springer): 80-100. ISBN 978-3-540-48068-6. doi:10.1007/3-540-48068-4_7. Consultado el 11 de octubre de 2024.
5. ↑ Cortés, Luis Alejandro; Eles, Petru; Peng, Zebo (16 de febrero de 2004). «Quasi-Static Scheduling for Real-Time Systems with Hard and Soft Tasks». Proceedings of the conference on Design, automation and test in Europe - Volume 2. DATE '04 (IEEE Computer Society): 21176. ISBN 978-0-7695-2085-8. doi:10.5555/968879.969132. Consultado el 11 de octubre de 2024.
6. ↑ Pont, M. J. (1 de noviembre de 2008). «Applying time-triggered architectures in reliable embedded systems: challenges and solutions». e & i Elektrotechnik und Informationstechnik (en inglés) 125 (11): 401-405. ISSN 1613-7620. doi:10.1007/s00502-008-0587-z. Consultado el 10 de octubre de 2024.
7. ↑ «Preemptive or Cooperative Multitasking?». www.on-time.com. Consultado el 10 de octubre de 2024.
8. ↑ «Understanding The Pros And Cons Of Concurrency». pwskills.com (en inglés estadounidense). 3 de octubre de 2024. Consultado el 10 de octubre de 2024.
9. ↑ Umme Kulsum. «Difference Between Preemptive And Non-Preemptive Scheduling» (en ingles).
10. ↑ «MISRA» (en inglés británico). Consultado el 10 de octubre de 2024.

## Enlaces externos

[editar]

* Sitio oficial
* Documentación oficial
* Versión para C++ ( QuarkTS++ )
* Librería para Arduino

Control de autoridades|

* Proyectos Wikimedia
* Datos: Q130484707

|

* Datos: Q130484707