El sistema operativo para microcontroladores ( MicroC/OS , estilizado como μC/OS o Micrium OS ) es un sistema operativo en tiempo real (RTOS) diseñado por Jean J. Labrosse en 1991. Es un núcleo en tiempo real con prioridad y desalojo para microprocesadores , escrito principalmente en el lenguaje de programación C. Está diseñado para su uso en sistemas embebidos .
MicroC/OS permite definir varias funciones en C, cada una de las cuales puede ejecutarse como un hilo o tarea independiente. Cada tarea se ejecuta con una prioridad diferente y como si controlara la unidad central de procesamiento (CPU). Las tareas de menor prioridad pueden ser interrumpidas por tareas de mayor prioridad en cualquier momento. Las tareas de mayor prioridad utilizan servicios del sistema operativo (SO) (como un retardo o un evento) para permitir la ejecución de las tareas de menor prioridad. Los servicios del SO se proporcionan para gestionar tareas y memoria, comunicarse entre tareas y controlar la temporización. [ 4 ]
Historia
El núcleo MicroC/OS se publicó originalmente en un artículo de tres partes en la revista Embedded Systems Programming y en el libro μC/OS The Real-Time Kernel de Labrosse. [ 5 ] En un principio, su intención era simplemente describir el funcionamiento interno de un sistema operativo portátil que había desarrollado para su propio uso, pero más tarde lo desarrolló como un producto comercial en su propia empresa Micrium, Inc. en las versiones II y III.
En 2016, Micrium, Inc. fue adquirida por Silicon Laboratories [ 6 ] y posteriormente se lanzó como código abierto bajo la licencia Apache .
Silicon Labs continúa manteniendo un producto de código abierto llamado Micrium OS para su uso en sus propios silicios [ 7 ] y un grupo de antiguos empleados de Micrium, Inc. (incluido Labrosse) proporciona consultoría y soporte tanto para μC/OS como para Cesium RTOS, una bifurcación propietaria creada justo después del lanzamiento de código abierto. [ 8 ]
μC/OS-II
Basado en el código fuente escrito para μC/OS y lanzado como producto comercial en 1998, μC/OS-II es un núcleo multitarea , determinista, escalable , con prioridad, almacenable en ROM y con capacidad de preempción, para microprocesadores y procesadores de señales digitales (DSP). Admite hasta 64 tareas. Su tamaño puede escalarse (entre 5 y 24 KB) para incluir únicamente las funcionalidades necesarias para cada uso.
La mayor parte de μC/OS-II está escrita en ANSI C , un lenguaje altamente portable, con código específico para cada microprocesador escrito en lenguaje ensamblador . El uso de este último se ha minimizado para facilitar la portabilidad a otros procesadores.
Usos en sistemas embebidos
μC/OS-II fue diseñado para su uso en sistemas embebidos. Si el fabricante dispone de la cadena de herramientas adecuada (es decir, compilador C, ensamblador y enlazador ), μC/OS-II puede integrarse como parte de un producto.
μC/OS-II se utiliza en muchos sistemas embebidos, entre ellos:
- aviónica
- Equipos y dispositivos médicos
- equipos de comunicaciones de datos
- Electrodomésticos
- Teléfonos móviles , asistentes digitales personales (PDA), MID
- Controles industriales
- electrónica de consumo
- Automotor
Estados de la tarea
μC/OS-II es un sistema operativo multitarea . Cada tarea es un bucle infinito y puede estar en cualquiera de los siguientes cinco estados (véase la figura a continuación).
- Latente
- Listo
- Correr
- Esperando (un evento)
- Interrumpido ( rutina de servicio de interrupción (ISR))
Además, puede gestionar hasta 64 tareas. Sin embargo, se recomienda reservar ocho de estas tareas para μC/OS-II , dejando una aplicación con hasta 56 tareas. [ 9 ]
Núcleos
El núcleo es el nombre que recibe el programa que realiza la mayoría de las tareas de mantenimiento del sistema operativo. El cargador de arranque cede el control al núcleo, que inicializa los distintos dispositivos a un estado conocido y prepara el ordenador para las operaciones generales. El núcleo es responsable de gestionar las tareas (es decir, de gestionar el tiempo de la CPU) y de la comunicación entre tareas. [ 10 ] El servicio fundamental que proporciona el núcleo es el cambio de contexto .
El planificador es la parte del núcleo responsable de determinar qué tarea se ejecuta a continuación. [ 11 ] La mayoría de los núcleos en tiempo real se basan en prioridades. En un núcleo basado en prioridades, el control de la CPU siempre se otorga a la tarea de mayor prioridad lista para ejecutarse. Existen dos tipos de núcleos basados en prioridades: no preemptivos y preemptivos . Los núcleos no preemptivos requieren que cada tarea haga algo para ceder explícitamente el control de la CPU. [ 11 ] Un núcleo preemptivo se utiliza cuando la capacidad de respuesta del sistema es más importante. Por lo tanto, μC/OS-II y la mayoría de los núcleos comerciales en tiempo real son preemptivos. [ 12 ] La tarea de mayor prioridad lista para ejecutarse siempre recibe el control de la CPU.
Asignación de tareas
Las tareas con la mayor tasa de ejecución reciben la máxima prioridad mediante la planificación de tasa monótona . [ 13 ] Este algoritmo de planificación se utiliza en sistemas operativos en tiempo real (RTOS) con una clase de planificación de prioridad estática . [ 14 ]
Tareas de gestión
En informática , una tarea es una unidad de ejecución . En algunos sistemas operativos , una tarea es sinónimo de proceso , en otros de hilo . En los sistemas informáticos de procesamiento por lotes , una tarea es una unidad de ejecución dentro de un trabajo . El usuario del sistema μC/OS-II puede controlar las tareas mediante las siguientes funciones:
- Función de tarea
- Creación de tareas
- Pila de tareas y comprobación de la pila
- Eliminación de tareas
- Cambiar la prioridad de una tarea
- Suspender y reanudar una tarea
- Obtener información sobre una tarea [ 15 ]
Gestionar la memoria
Para evitar la fragmentación , μC/OS-II permite que las aplicaciones obtengan bloques de memoria de tamaño fijo a partir de una partición formada por un área de memoria contigua. Todos los bloques de memoria tienen el mismo tamaño y la partición contiene un número entero de bloques. La asignación y desasignación de estos bloques de memoria se realiza en tiempo constante y es un sistema determinista . [ 16 ]
Gestionar el tiempo
μC/OS-II requiere que se proporcione una fuente de tiempo periódica para controlar los retardos y los tiempos de espera. Un pulso debe producirse entre 10 y 1000 veces por segundo, o Hertz . Cuanto mayor sea la frecuencia del pulso, mayor será la sobrecarga que μC/OS-II impondrá al sistema. La frecuencia del pulso de reloj depende de la resolución de pulso deseada por la aplicación. Las fuentes de pulso se pueden obtener dedicando un temporizador de hardware o generando una interrupción a partir de una señal de la red eléctrica de corriente alterna (CA) (50 o 60 Hz). Esta fuente de tiempo periódica se denomina pulso de reloj. [ 17 ]
Una vez determinado el tiempo de un tic-tac , las tareas pueden ser:
- Retrasar una tarea
- Reanudar una tarea postergada
Comunicación entre tareas
La comunicación entre tareas o procesos en μC/OS-II se produce mediante semáforos , buzones de mensajes, colas de mensajes, tareas y rutinas de servicio de interrupción (ISR). Estos elementos pueden interactuar entre sí cuando una tarea o una ISR envía una señal a otra tarea a través de un objeto del núcleo denominado bloque de control de eventos (ECB). Dicha señal se considera un evento.
μC/OS-III
μC/OS-III es el acrónimo de Micro-Controller Operating Systems Version 3 (Sistemas Operativos para Microcontroladores, Versión 3), introducido en 2009 y que añade funcionalidades al RTOS μC/OS-II .
μC/OS-III ofrece todas las características y funciones de μC/OS-II . La principal diferencia radica en el número de tareas admitidas. μC/OS-II permite solo una tarea en cada uno de los 255 niveles de prioridad, para un máximo de 255 tareas. μC/OS-III permite cualquier número de tareas de aplicación, niveles de prioridad y tareas por nivel, limitado únicamente por el acceso del procesador a la memoria. [ 18 ] [ 19 ]
Actualmente, Micrium, Inc., una filial de Silicon Labs, se encarga del mantenimiento de μC/OS-II y μC/OS-III , y su licencia puede obtenerse por producto o por línea de productos.
Usos en sistemas embebidos
Los usos son los mismos que para μC/OS-II.
Estados de la tarea
μC/OS-III es un sistema operativo multitarea . Cada tarea es un bucle infinito y puede estar en cualquiera de los cinco estados (inactivo, listo, en ejecución, interrumpido o pendiente). μC/OS-III admite un número ilimitado de prioridades de tarea, pero configurarlo con entre 32 y 256 prioridades suele ser adecuado para la mayoría de los sistemas embebidos. [ 20 ]
Programación por turnos rotativos
Cuando dos o más tareas tienen la misma prioridad, el núcleo permite que una tarea se ejecute durante un tiempo predeterminado, denominado cuanto , y luego selecciona otra tarea. Este proceso se conoce como planificación round robin o división de tiempo. El núcleo cede el control a la siguiente tarea en la cola si:
- La tarea actual no tiene trabajo que hacer durante su intervalo de tiempo, o
- La tarea actual se completa antes del final de su intervalo de tiempo, o
- El segmento de tiempo termina.
Núcleos
La funcionalidad del kernel para μC/OS-III es la misma que para μC/OS-II .
Tareas de gestión
La gestión de tareas funciona igual que en μC/OS-II . Sin embargo, μC/OS-III admite multitarea y permite que una aplicación tenga cualquier número de tareas. El número máximo de tareas está limitado únicamente por la cantidad de memoria del ordenador (tanto de código como de datos) disponible para el procesador.
Una tarea puede implementarse mediante ejecución programada hasta su finalización, en cuyo caso la tarea se elimina a sí misma cuando termina, o, más comúnmente, como un bucle infinito, esperando a que ocurran eventos y procesando dichos eventos.
Gestionar la memoria
La gestión de la memoria se realiza de la misma manera que en μC/OS-II .
Gestionar el tiempo
μC/OS-III ofrece las mismas funciones de gestión de tiempo que μC/OS-II . Además, proporciona servicios a las aplicaciones para que las tareas puedan suspender su ejecución durante periodos de tiempo definidos por el usuario. Estos periodos se especifican mediante ciclos de reloj, horas, minutos, segundos o milisegundos .
Comunicación entre tareas
En ocasiones, una tarea o rutina de servicio de interrupción (ISR) debe comunicar información a otra tarea, ya que no es seguro que dos tareas accedan simultáneamente a los mismos datos o recursos de hardware. Esto se puede solucionar mediante una transferencia de información, denominada comunicación entre tareas. La información se puede comunicar entre tareas de dos maneras: a través de datos globales o mediante el envío de mensajes.
Al usar variables globales, cada tarea o ISR debe asegurarse de tener acceso exclusivo a las variables. Si hay una ISR involucrada, la única forma de asegurar el acceso exclusivo a variables comunes es deshabilitar las interrupciones . Si dos tareas comparten datos, cada una puede obtener acceso exclusivo a las variables deshabilitando las interrupciones, bloqueando el planificador, usando un semáforo o, preferiblemente, usando un semáforo de exclusión mutua . Los mensajes se pueden enviar a un objeto intermedio llamado cola de mensajes o directamente a una tarea, ya que en μC/OS-III , cada tarea tiene su propia cola de mensajes integrada. Use una cola de mensajes externa si varias tareas van a esperar mensajes. Envíe un mensaje directamente a una tarea si solo una tarea procesará los datos recibidos. Mientras una tarea espera a que llegue un mensaje, no usa tiempo de CPU.
Puertos
Un puerto implica tres aspectos: CPU, SO y código específico de la placa (BSP). μC/OS-II y μC/OS-III tienen puertos para la mayoría de los procesadores y placas más populares del mercado y son adecuados para su uso en sistemas embebidos críticos para la seguridad, como aviación, sistemas médicos e instalaciones nucleares. Un puerto μC/OS-III implica escribir o cambiar el contenido de tres archivos específicos del kernel: OS_CPU.H, OS_CPU_A.ASM, y OS_CPU_C.C. Finalmente, crear o cambiar un paquete de soporte de placa (BSP) para la placa de evaluación o placa de destino que se esté utilizando. Un puerto μC/OS-III es similar a un puerto μC/OS-II . Hay muchos más puertos de los que se enumeran aquí, y los puertos están sujetos a desarrollo continuo. Tanto μC/OS-II como μC/OS-III son compatibles con bibliotecas SSL/TLS populares como wolfSSL , que garantizan la seguridad en todas las conexiones.
Cambio de licencia
Tras su adquisición por Silicon Labs, Micrium cambió en febrero de 2020 a un modelo de licencia de código abierto. Esto incluye uC/OS III, todas las versiones anteriores y todos los componentes: USB, sistema de archivos , interfaz gráfica de usuario, TCP/IP, etc.
Documentación y soporte
Se ofrece asistencia a través de un foro de soporte habitual y varios libros completos, algunos de ellos específicos para una arquitectura de microcontrolador y plataforma de desarrollo concretas, disponibles en formato PDF gratuito o en tapa dura a bajo coste. Weston Embedded Solutions ofrece asistencia de pago.
Referencias
- ↑ "Gecko Platform 4.2.0.0 GA" (PDF) . 14/12/2022 . Consultado el 04/01/2023 .
- ↑ "Lanzamientos de gecko_sdk en github.com" . GitHub . Consultado el 4 de enero de 2023 .
- 1 2 3 "Notas de la versión de Cs/OS3" . Weston Embedded Solutions.
- ↑ "NiosII GCC con MicroC/OS" . Escuela de Ingeniería Eléctrica e Informática . Universidad de Cornell. Junio de 2006. Consultado el 25 de abril de 2017 .
- ^ Labrosse, Jean J. (15 de junio de 2002). μC/OS El kernel en tiempo real (2ª ed.). Prensa CRC. ISBN 978-1578201037.
- ↑ "¿Qué es Micrium?" . Weston Embedded Solutions . Consultado el 4 de enero de 2023 .
- ↑ "Software y documentación de Micrium" . Consultado el 4 de enero de 2023 .
- ↑ "¿Por qué Cesium RTOS?" . Weston Embedded Solutions . Consultado el 4 de enero de 2023 .
- ↑ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 77.
- ↑ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 39.
- 1 2 Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 40.
- ↑ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 42.
- ↑ Liu, Chung Lang; Layland, James W. (1973). "Algoritmos de planificación para multiprogramación en un entorno de tiempo real estricto". Journal of the ACM . 20 (1): 46– 61. CiteSeerX 10.1.1.36.8216 . doi : 10.1145/321738.321743 . S2CID 59896693 .
- ↑ Bovet, Daniel. "Comprendiendo el núcleo de Linux" . Archivado del original el 21 de septiembre de 2014.
- ↑ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). págs. 45–49 .
- ↑ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). págs. 273–285 .
- ↑ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). págs. 145–152 .
- ^ "Comparación de características μC/OS-II y μC/OS-III" . Micrio .
- ↑ "Descripción general de μC/OS-III" . Micrium .
- ↑ "Sistema operativo en tiempo real μC/OS-III™" (PDF) . media.digikey.com .
Fuentes
- Soporte de protocolo para μC/OS-II de Fusion Embedded
- Manual de usuario de Micrium-uCOS-III, 1.ª edición
- uC/OS-III: El núcleo en tiempo real para el Renesas RX62N
Enlaces externos
- Sitio web oficial
- SiliconLabs en GitHub
- Resumen de las funciones y estructuras de datos más utilizadas en uC/OS-II
- NiosII GCC con MicroC/OS
- Manual de referencia μC/OS-II
- Cómo ejecutar una aplicación μC/OS-II
- Wikiversidad: Sistemas Operativos/Modelos de Núcleo# Núcleo Monolítico
- Sistemas operativos en tiempo real
- Sistemas operativos integrados
- Sistemas operativos ARM
- Sistemas operativos basados en microkernel
- Micronúcleos