stringtranslate.com

Sistemas operativos con microcontroladores

Micro-Controller Operating Systems ( 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 preemptivo basado en prioridades para microprocesadores , escrito principalmente en el lenguaje de programación C. Está destinado a su uso en sistemas integrados .

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 se ejecuta como si fuera la dueña de la unidad central de procesamiento (CPU). Las tareas de menor prioridad pueden ser reemplazadas por tareas de mayor prioridad en cualquier momento. Las tareas de mayor prioridad utilizan servicios del sistema operativo (como un retraso o un evento) para permitir que se ejecuten las tareas de menor prioridad. Los servicios del sistema operativo se proporcionan para administrar tareas y memoria, comunicarse entre tareas y cronometrar. [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 describir simplemente los componentes internos 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 usar en su propio silicio [7] y un grupo de ex empleados de Micrium, Inc. (incluido Labrosse) brinda consultoría y soporte tanto para μC/OS como para Cesium RTOS, una bifurcación patentada 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 ​​presentado como producto comercial en 1998, μC/OS-II es un núcleo portátil , escalable , preemptivo, multitarea, determinista, en tiempo real y con capacidad para almacenar en ROM para microprocesadores y procesadores de señales digitales (DSP). Administra hasta 64 tareas. Su tamaño se puede escalar (entre 5 y 24 Kbytes) para que contenga únicamente las funciones necesarias para un uso determinado.

La mayor parte de μC/OS-II está escrita en lenguaje ANSI C , que es muy portátil, y el código específico del microprocesador de destino está escrito en lenguaje ensamblador . El uso de este último lenguaje se minimiza para facilitar la portabilidad a otros procesadores.

Usos en sistemas embebidos

μC/OS-II fue diseñado para usos integrados. Si el productor tiene la cadena de herramientas adecuada (es decir, compilador de C, ensamblador y enlazador-localizador [ se necesita aclaración ] ), μC/OS-II se puede integrar como parte de un producto.

μC/OS-II se utiliza en muchos sistemas integrados, incluidos:

Estados de tareas

μC/OS-II es un sistema operativo multitarea . Cada tarea es un bucle infinito y puede estar en cualquiera de los cinco estados siguientes (consulte la siguiente figura adicionalmente)

Además, puede gestionar hasta 64 tareas. Sin embargo, se recomienda que ocho de estas tareas se reserven para μC/OS-II, dejando una aplicación con hasta 56 tareas. [9]

Granos

El núcleo es el nombre que se le da al programa que realiza la mayoría de las tareas de mantenimiento del sistema operativo. El cargador de arranque entrega el control al núcleo, que inicializa los diversos dispositivos a un estado conocido y prepara el ordenador para las operaciones generales. [10] 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. [11] 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. [12] La mayoría de los núcleos de 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. [12] 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. [13] 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 el uso de una programación monótona de velocidad . [14] Este algoritmo de programación se utiliza en sistemas operativos en tiempo real (RTOS) con una clase de programación de prioridad estática . [15]

Gestión de tareas

En informática , una tarea es una unidad de ejecución . En algunos sistemas operativos , una tarea es sinónimo de un proceso , en otros de un 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:

Gestión de 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 . [17]

Gestionar el tiempo

μC/OS-II requiere que se proporcione una fuente de tiempo periódica para realizar un seguimiento de los retrasos y tiempos de espera. Un tic debe ocurrir entre 10 y 1000 veces por segundo, o Hertz . Cuanto más rápida sea la tasa de tic, más sobrecarga impone μC/OS-II al sistema. La frecuencia del tic del reloj depende de la resolución de tic deseada de una aplicación. Las fuentes de tic se pueden obtener dedicando un temporizador de hardware o generando una interrupción a partir de una señal de línea de alimentación de corriente alterna (CA) (50 o 60 Hz). Esta fuente de tiempo periódica se denomina tic del reloj. [18]

Una vez determinado el tiempo del reloj , las tareas pueden ser:

Comunicación entre tareas

La comunicación entre tareas o entre procesos en μC/OS-II se produce a través de semáforos , buzón de mensajes, colas de mensajes, tareas y rutinas de servicio de interrupción (ISR). Pueden interactuar entre sí cuando una tarea o una ISR envía una señal a una tarea a través de un objeto del núcleo llamado bloque de control de eventos (ECB). La señal se considera un evento.

μC/OS-III

μC/OS-III es el acrónimo de Micro-Controller Operating Systems Version 3, introducido en 2009 y que agrega funcionalidad al RTOS μC/OS-II.

μC/OS-III ofrece todas las características y funciones de μC/OS-II. La mayor diferencia es la cantidad 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 cantidad de tareas de aplicación, niveles de prioridad y tareas por nivel, limitadas solo por el acceso del procesador a la memoria. [19] [20]

Actualmente, Micrium, Inc., una subsidiaria de Silicon Labs, mantiene μC/OS-II y μC/OS-III, y se pueden licenciar por producto o por línea de productos.

Usos en sistemas embebidos

Los usos son los mismos que para μC/OS-II

Estados de tareas

μC/OS-III es un sistema operativo multitarea . Cada tarea es un bucle infinito y puede estar en cualquiera de los cinco estados (inactiva, lista, en ejecución, interrumpida o pendiente). μC/OS-III admite una cantidad ilimitada de prioridades de tareas, pero la configuración de μC/OS-III para que tenga entre 32 y 256 prioridades de tareas suele ser adecuada para la mayoría de los sistemas integrados. [21]

Programación por turnos

Cuando dos o más tareas tienen la misma prioridad, el núcleo permite que una tarea se ejecute durante un período de tiempo predeterminado, denominado quantum , y luego selecciona otra tarea. Este proceso se denomina programación por turnos o segmentación de tiempo. El núcleo cede el control a la siguiente tarea en la fila si:

Granos

La funcionalidad del kernel para μC/OS-III es la misma que para μC/OS-II.

Gestión de tareas

La gestión de tareas también funciona de la misma manera que en μC/OS-II. Sin embargo, μC/OS-III admite la multitarea y permite que una aplicación tenga cualquier cantidad de tareas. La cantidad máxima de tareas está limitada únicamente por la cantidad de memoria de la computadora (tanto de código como de espacio de datos) disponible para el procesador.

Una tarea se puede implementar mediante su ejecución hasta su finalización programada, en la que la tarea se elimina a sí misma cuando finaliza, o más típicamente como un bucle infinito, esperando que ocurran eventos y procesándolos.

Gestión de 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. También proporciona servicios a las aplicaciones para que las tareas puedan suspender su ejecución durante los retrasos definidos por el usuario. Los retrasos se especifican mediante una cantidad de ticks de reloj u horas, minutos, segundos y milisegundos .

Comunicación entre tareas

En ocasiones, una tarea o ISR debe comunicar información a otra tarea, ya que no es seguro que dos tareas accedan a los mismos datos específicos o recursos de hardware a la vez. Esto se puede resolver 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 enviando mensajes.

Al utilizar variables globales, cada tarea o ISR debe asegurarse de tener acceso exclusivo a las variables. Si hay un ISR involucrado, la única forma de asegurar el acceso exclusivo a las 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, utilizando un semáforo o, preferiblemente, utilizando 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 incorporada. Utilice una cola de mensajes externa si varias tareas deben esperar mensajes. Envíe un mensaje directamente a una tarea si solo una tarea procesará los datos recibidos. Mientras una tarea espera que llegue un mensaje, no utiliza 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 los procesadores y placas más populares del mercado y son adecuados para su uso en sistemas integrados 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 núcleo: OS_CPU.H, OS_CPU_A.ASM, y OS_CPU_C.C. Finalmente, cree o cambie un paquete de soporte de placa (BSP) para la placa de evaluación o la placa de destino que se esté utilizando. Un puerto μC/OS-III es similar a un puerto μC/OS-II. Hay significativamente más puertos que los que se enumeran aquí, y los puertos están sujetos a un desarrollo continuo. Tanto μC/OS-II como μC/OS-III son compatibles con las bibliotecas SSL/TLS populares, como wolfSSL , que garantizan la seguridad en todas las conexiones.

Cambio de licencia

Tras su adquisición por parte de Silicon Labs, Micrium cambió en febrero de 2020 al modelo de licencia de código abierto . Esto incluye uC/OS III, todas las versiones anteriores, todos los componentes: USB, sistema de archivos , GUI, TCP/IP, etc.

Documentación y soporte

El soporte está disponible a través de un foro de soporte técnico habitual y de varios libros completos, algunos de los cuales están diseñados para una determinada arquitectura de microcontrolador y plataforma de desarrollo, en formato PDF gratuito o en formato de tapa dura a bajo coste. Weston Embedded Solutions ofrece soporte técnico pago.

Referencias

  1. ^ "Plataforma Gecko 4.2.0.0 GA" (PDF) . 2022-12-14 . Consultado el 2023-01-04 .
  2. ^ "Lanzamientos de gecko_sdk en github.com". GitHub . Consultado el 4 de enero de 2023 .
  3. ^ abc "Notas de la versión de Cs/OS3". Soluciones integradas de Weston.
  4. ^ "NiosII GCC con MicroC/OS". Escuela de Ingeniería Eléctrica y Computación . Universidad de Cornell. Junio ​​de 2006. Consultado el 25 de abril de 2017 .
  5. ^ Labrosse, Jean J. (15 de junio de 2002). μC/OS El kernel en tiempo real (2ª ed.). Prensa CRC. ISBN 978-1578201037.
  6. ^ "¿Qué es Micrium?". Weston Embedded Solutions . Consultado el 4 de enero de 2023 .
  7. ^ "Software y documentación de Micrium" . Consultado el 4 de enero de 2023 .
  8. ^ "¿Por qué Cesium RTOS?". Weston Embedded Solutions . Consultado el 4 de enero de 2023 .
  9. ^ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 77.
  10. ^ Wikiversidad:Sistemas operativos/Modelos de kernel#Núcleo monolítico
  11. ^ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 39.
  12. ^ ab Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 40.
  13. ^ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). pág. 42.
  14. ^ Liu, Chung Lang; Layland, James W. (1973). "Algoritmos de planificación para multiprogramación en un entorno de tiempo real estricto". Revista de la ACM . 20 (1): 46–61. CiteSeerX 10.1.1.36.8216 . doi :10.1145/321738.321743. S2CID  59896693. 
  15. ^ Bovet, Daniel. "Entendiendo el núcleo de Linux". Archivado desde el original el 21 de septiembre de 2014.
  16. ^ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). págs. 45–49.
  17. ^ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). págs. 273–285.
  18. ^ Labrosse, Jean J. MicroC/OS-II: El núcleo en tiempo real (2.ª ed.). págs. 145–152.
  19. ^ "Comparación de características μC/OS-II y μC/OS-III". Micrio .
  20. ^ "Descripción general de μC/OS-III". Micrium .
  21. ^ https://media.digikey.com/PDF/Data%20Sheets/Micrium%20PDFs/UC_OS-III_RTOS.pdf#:~:text=Micrium%E2%80%99s%20%CE%BCC%2FOS-III% 20admite%20ARM7%2F9%2C%20Cortex-MX%2C%20Nios-II%2C%20PowerPC%2C%20Coldfire%2C, están%20disponibles%20para%20descarga%20desde%20el sitio web%20Micrium%20.

Fuentes

Enlaces externos