¿Qué es el sistema operativo UCOS?
u C/OS es un sistema operativo compacto, de código abierto y gratuito en tiempo real con un kernel privable en tiempo real. \x0d\\x0d\ El predecesor de μC/OS-II es μC/OS. Fue publicado por primera vez en 1992 por el experto estadounidense en sistemas integrados Jean J.Labrosse en las ediciones de mayo y junio de la revista "Embedded Systems Programming". publicó el código fuente de μC/OS en la BBS de la revista. \x0d\\x0d\ μC/OS y μC/OS-II están especialmente diseñados para aplicaciones integradas en computadora y la mayoría de los códigos están escritos en lenguaje C. Las partes relacionadas con el hardware de la CPU están escritas en lenguaje ensamblador, y la parte del lenguaje ensamblador, que totaliza aproximadamente 200 líneas, está comprimida al mínimo para facilitar la transferencia a cualquier otra CPU. Siempre que los usuarios tengan un compilador cruzado, ensamblador, conector y otras herramientas de software estándar ANSI C, pueden integrar μC/OS-II en el producto desarrollado. μC/OS-II tiene las características de alta eficiencia de ejecución, tamaño reducido, excelente rendimiento en tiempo real y gran escalabilidad. El núcleo mínimo se puede compilar a 2 KB. μC/OS-II se ha adaptado a casi todas las CPU conocidas. \x0d\\x0d\ Estrictamente hablando, uC/OS-II es solo un núcleo de sistema operativo en tiempo real. Solo incluye funciones básicas como programación de tareas, administración de tareas, administración de tiempo, administración de memoria y comunicación y sincronización entre tareas. No se proporcionan servicios adicionales como administración de entrada y salida, sistema de archivos y red. Sin embargo, debido a la buena escalabilidad y al código fuente abierto de uC/OS-II, los propios usuarios pueden implementar estas funciones no esenciales según sus necesidades. \x0d\\x0d\ El objetivo de uC/OS-II es implementar un kernel preventivo en tiempo real basado en la programación de prioridades y proporcionar los servicios más básicos del sistema en este kernel, como semáforos, buzones de correo, colas de mensajes y memoria. gestión, gestión de interrupciones, etc. \x0d\\x0d\ Administración de tareas\x0d\\x0d\ uC/OS-II puede admitir hasta 64 tareas, correspondientes a niveles de prioridad del 0 al 63, siendo 0 la prioridad más alta. 63 es el nivel más bajo. El sistema reserva 4 tareas de mayor prioridad y 4 tareas de menor prioridad. El número de tareas disponibles para todos los usuarios es 56. \x0d\\x0d\ uC/OS-II proporciona varias llamadas de funciones para la gestión de tareas, incluida la creación de tareas, la eliminación de tareas, el cambio de prioridades de tareas, la suspensión y recuperación de tareas, etc. \x0d\\x0d\ Cuando se inicializa el sistema, se generarán automáticamente dos tareas: una es una tarea inactiva, que tiene la prioridad más baja. La tarea solo realiza una operación de acumulación en una variable entera; que tiene la segunda prioridad Baja, la tarea es responsable de contar la utilización actual de la CPU. \x0d\\x0d\ Gestión del tiempo\x0d\\x0d\ La gestión del tiempo de uC/OS-II se realiza mediante interrupciones programadas. Las interrupciones programadas generalmente ocurren una vez cada 10 milisegundos o 100 milisegundos. La frecuencia del tiempo depende del hardware del usuario. Requisitos de programación del temporizador del sistema para lograr. El intervalo de tiempo entre interrupciones es fijo y la interrupción también se convierte en el latido de un reloj. \x0d\\x0d\ uC/OS-II requiere que los usuarios llamen a las funciones del sistema relacionadas con el ritmo del reloj proporcionadas por el sistema en el programa de servicio de interrupción programada, como las funciones de cambio de tareas a nivel de interrupción y las funciones de hora del sistema. \x0d\\x0d\ Administración de memoria\x0d\\x0d\ En ANSI C, se utilizan dos funciones, malloc y free, para asignar y liberar memoria dinámicamente. Sin embargo, en los sistemas integrados en tiempo real, múltiples errores de este tipo provocarán la fragmentación de la memoria y, debido al algoritmo de gestión de la memoria, el tiempo de ejecución de malloc y free también es incierto. \x0d\\x0d\ En uC/OS-II, la memoria grande y continua se administra según las particiones. Cada partición contiene un número entero de bloques de memoria del mismo tamaño, pero el tamaño de los bloques de memoria entre diferentes particiones puede ser diferente.
Cuando el usuario necesita asignar memoria dinámicamente, el sistema selecciona una partición adecuada y asigna memoria en bloques. Cuando se libera la memoria, el bloque se vuelve a colocar en la partición a la que pertenecía anteriormente. Esto puede resolver eficazmente el problema de fragmentación y el tiempo de ejecución también se fija. \x0d\\x0d\ Comunicación y sincronización entre tareas\x0d\\x0d\ Para un sistema operativo multitarea, la comunicación y sincronización entre tareas son esenciales. uC/OS-II proporciona 4 objetos de sincronización, a saber, semáforo, buzón, cola de mensajes y evento. Todos estos objetos de sincronización tienen interfaces para crear, esperar, enviar y consultar para implementar la comunicación y sincronización entre procesos. \x0d\\x0d\ Programación de tareas\x0d\\x0d\ uC/OS-II utiliza un núcleo multitarea privable en tiempo real. El kernel preventivo en tiempo real ejecuta la tarea de mayor prioridad que esté lista en cualquier momento. \x0d\\x0d\ La programación de tareas de uC/os-II es una programación preventiva basada completamente en la prioridad de la tarea, es decir, una vez que la tarea de mayor prioridad está en el estado listo, inmediatamente se adelanta al procesador de la tarea de baja prioridad en ejecución. recurso. Para simplificar el diseño del sistema, uC/OS-II estipula que todas las tareas tienen diferentes prioridades, porque la prioridad de una tarea también identifica de forma única la tarea en sí. \x0d\\x0d\ La programación de tareas se producirá en las siguientes circunstancias: \x0d\\x0d\ Se ejecutan las tareas de baja prioridad del estado. Este tipo de programación también se denomina cambio de contexto a nivel de tarea. \x0d\\x0d\ 2) Cuando llega el latido del reloj para una tarea de alta prioridad, en el controlador de interrupciones del reloj, el kernel encuentra que la tarea de alta prioridad ha obtenido condiciones de ejecución (como que el reloj inactivo ha expirado), y luego directamente en el estado de interrupción Cambie a ejecución de tareas de alta prioridad. Este tipo de programación también se denomina cambio de contexto a nivel de interrupción. \x0d\\x0d\ Estos dos métodos de programación son muy comunes en el proceso de ejecución de uC/OS-II. En términos generales, el primero ocurre en el servicio del sistema y el segundo ocurre en el programa de servicio de interrupción del reloj. \x0d\\x0d\ El contenido de la programación del trabajo se puede dividir en dos partes: buscar la tarea de mayor prioridad y cambiar de tarea. La búsqueda de la tarea de mayor prioridad se logra estableciendo una lista de tareas listas. Cada tarea en u C/OS tiene un espacio de pila independiente y una estructura de datos llamada Bloque de control de tareas TCB (Bloque de control de tareas), en el que la primera variable miembro es el puntero de la pila de tareas guardada. El módulo de programación de tareas primero usa la variable OSTCBHighRdy para registrar la dirección TCB de la tarea lista de nivel más alto actual y luego llama a la función OS_TASK_SW () para realizar el cambio de tareas. \x0d\\x0d\ Componentes de μC/OS-II \x0d\\x0d\ μC/OS-II se pueden dividir aproximadamente en cinco partes: núcleo, procesamiento de tareas, procesamiento de tiempo, sincronización y comunicación de tareas y trasplante de CPU. \x0d\\x0d\ 1) La parte central (OSCore.c)\x0d\\x0d\ es el núcleo de procesamiento del sistema operativo, incluida la inicialización del sistema operativo, el funcionamiento del sistema operativo, el preámbulo de entrada y salida de interrupciones, el ritmo del reloj y la tarea. programación y procesamiento de eventos Espere varias partes. Las partes que pueden mantener el funcionamiento básico del sistema están todas aquí. \x0d\\x0d\ 2) Parte de procesamiento de tareas (OSTask.c)\x0d\\x0d\ El contenido de la parte de procesamiento de tareas está estrechamente relacionado con la operación de la tarea. Incluyendo creación, eliminación, suspensión, recuperación, etc. de tareas. Debido a que μC/OS-II está programado en función de tareas como unidad básica, esta parte del contenido también es muy importante. \x0d\\x0d\ 3) Parte del reloj (OSTime.c)\x0d\\x0d\ La unidad de reloj más pequeña en μC/OS-II es el timetick (ritmo del reloj). Aquí se completan operaciones como el retraso de tareas.
\x0d\\x0d\ 4) Parte de comunicación y sincronización de tareas\x0d\\x0d\ Es la parte de procesamiento de eventos, que incluye semáforos, buzones de correo, colas de buzones de correo, indicadores de eventos, etc., se utiliza principalmente para la interconexión entre tareas y críticas; Visita de recursos. \x0d\\x0d\ 5) La parte de la interfaz con la CPU\x0d\\x0d\ se refiere a la parte de trasplante de μC/OS-II para la CPU utilizada. Dado que μC/OS-II es un sistema operativo universal, la implementación de cuestiones clave aún debe trasplantarse de acuerdo con el contenido y los requisitos específicos de la CPU específica. Esta parte del contenido generalmente está escrita en lenguaje ensamblador porque involucra punteros del sistema como SP. Incluye principalmente la implementación subyacente del cambio de tareas a nivel de interrupción, la implementación subyacente del cambio de tareas a nivel de tarea, la generación y procesamiento de latidos del reloj y las partes de procesamiento relacionadas de las interrupciones.