¿Por qué las naves espaciales y los misiles prefieren utilizar microcontroladores en lugar de sistemas integrados?


029a original del hermano Tao

I. Introducción

Hace unos días, hablé con un puesto en cierto instituto de investigación y me dijo: En la aviación, aeroespacial y armas y equipos de misiles actuales, casi todos los sistemas de control usan microcomputadoras de un solo chip en lugar de sistemas integrados .

A primera vista, contradice nuestra intuición: la lógica de control de un dispositivo tan alto debe ser muy complicada ¿Cómo se puede lograr un control de función tan complicado sin un sistema integrado? Luego miré más de cerca y me di cuenta de que la respuesta es: seguro + controlable .

En este artículo, hablemos de esas cosas entre MCU y el sistema operativo integrado y RTOS . A través de este artículo, ¡tendrá una comprensión sistemática y completa de la naturaleza en tiempo real de su sistema operativo!

2. Acerca de la definición entre microordenador de un solo chip y sistema integrado

Para ser honesto, nadie puede dar una respuesta estándar y correcta con respecto a la distinción entre los dos . Todo el mundo entiende los microcontroladores y los sistemas integrados de forma ligeramente diferente.

Independientemente del hardware, desde la perspectiva del desarrollo de aplicaciones, lo entiendo así:

Microordenador de un solo chip : puede usar directamente la máquina de estado para implementar el marco del programa, o puede usar algunos RTOS (ucOS, FreeRTOS, vxWorks, RT-Thread), etc. para completar algunas funciones de programación.

Sistema integrado : utilice el sistema operativo Linux integrado y algunas variantes para escribir programas de aplicación.

Sé que mi comprensión puede ser incorrecta, al menos no rigurosa y de alcance limitado. Dado que no hay una respuesta estándar, citemos la definición en Wikipedia. Después de todo, el concepto está muerto y, lo que es más importante, ¿cómo lo hacemos de acuerdo con a las necesidades reales. Elija .

1. Microcontrolador

  1. Microordenador de un solo chip, nombre completo microordenador de un solo chip (microordenador de un solo chip), también conocido como unidad de microcontrolador MCU (unidad de microcontrolador).
  2. Un microordenador que integra la unidad central de procesamiento, la memoria, el temporizador / contador, varias interfaces de entrada y salida, etc. en un chip de circuito integrado.
  3. Debido a su rápido desarrollo, la definición del antiguo microordenador de un solo chip ya no puede satisfacerse, por lo que se denomina una gama más amplia de microcontroladores en muchas aplicaciones;

2. Sistema integrado

  1. Embedded System (Embedded System) es un sistema informático integrado en un sistema mecánico o eléctrico con funciones específicas y rendimiento informático en tiempo real.
  2. Los sistemas integrados se utilizan a menudo para controlar de manera eficiente muchos dispositivos comunes. El sistema integrado suele ser un dispositivo completo que contiene hardware digital y componentes mecánicos, como el sistema de frenos antibloqueo de un automóvil.
  3. Los sistemas embebidos modernos suelen estar basados ​​en microcontroladores (como unidades centrales de procesamiento con memoria integrada y / o interfaces periféricas), pero en sistemas más complejos, microprocesadores ordinarios (que utilizan chips de memoria externa y circuitos de interfaz periférica) también es muy común.

3. Linux integrado

  1. Embedded Linux (inglés: Embedded Linux) es un término general para un tipo de sistema operativo integrado. Este tipo de sistema operativo se basa en el kernel de Linux y está diseñado para ser utilizado en dispositivos integrados.
  2. Es esencialmente el mismo que el sistema Linux que se ejecuta en la computadora. Aunque se ha sometido a algunos ajustes funcionales, es esencialmente el mismo. Utiliza principalmente la programación de tareas, la administración de memoria, la abstracción de hardware y otras funciones en el kernel de Linux.

4. RTOS

  1. El sistema operativo en tiempo real (RTOS), también conocido como sistema operativo en tiempo real, ejecuta y administra los recursos del sistema en una secuencia y proporciona una base consistente para desarrollar aplicaciones.
  2. En comparación con los sistemas operativos generales, la característica más importante de los sistemas operativos en tiempo real es el "tiempo real". Si hay una tarea que ejecutar, el sistema operativo en tiempo real ejecutará la tarea inmediatamente (en poco tiempo) sin necesidad de larga demora. Esta característica asegura la ejecución oportuna de varias tareas.

Tres, no en tiempo real, suave en tiempo real, difícil en tiempo real

En primer lugar, debemos entender qué es el tiempo real . La consideración en tiempo real no es la velocidad, el rendimiento, el rendimiento, sino el determinismo , es decir: cuando ocurre un evento, durante cuánto tiempo se puede garantizar que se procesará de manera determinista, siempre que pueda cumplir con este requisito, puede volverse difícil real tiempo. tal como:

Sistema operativo 1: cuando ocurre una interrupción, se puede garantizar que llegará aquí en 1 segundo, entonces es un sistema en tiempo real difícil. Aunque el tiempo de respuesta es largo, es definitivo;
sistema operativo 2: cuando ocurre una interrupción, casi siempre puede ser 1 Si se completa en milisegundos, entonces no puede convertirse en un sistema real duro Aunque el tiempo de respuesta es corto, es incierto.

También he visto un artículo que dice: ¡ La declaración ambigua de soft real-time debe cancelarse , ya sea en tiempo real o en tiempo no real!

El sistema operativo contiene muchas funciones: programación de tareas, administración de memoria, administración de archivos, etc. El núcleo de las cuales es la programación de tareas , que también es la mayor diferencia entre tiempo no real, tiempo real suave y tiempo real duro.

Esa medida de los indicadores de rendimiento en tiempo real es:

1. Retardo de interrupción : cuando ocurre una interrupción causada por un evento externo, el tiempo transcurrido hasta que se ejecuta la primera instrucción del manejador de interrupciones correspondiente;
2. Retraso de prioridad de tarea : cuando una tarea de alta prioridad está lista Tiempo, el tiempo transcurrido para tomar los recursos de la CPU de las tareas de baja prioridad que se están ejecutando;

Los diferentes sistemas operativos tienen diferentes mecanismos de programación de tareas , y la estrategia de este mecanismo de programación está relacionada con los escenarios de uso reales . Por lo tanto, no existe lo que es bueno y lo que no es bueno, ¡lo correcto es lo mejor !

Por ejemplo, en nuestro sistema de escritorio, debemos considerar la multitarea y la concurrencia , y debemos ejecutar varios programas al mismo tiempo. Al usuario no le importa qué programa es más lento, o incluso lo nota; pero para un sistema de control de misiles , cuando un sensor externo ingresa una señal, cuando se dispara un evento, el procesamiento correspondiente debe ejecutarse inmediatamente ; de lo contrario, habrá un retraso de 1 milisegundo, ¡y el resultado puede estar a mil millas de distancia!

Cuarto, la estrategia de programación del sistema Linux x86

La PC que usamos todos los días, su principal objetivo es ejecutar múltiples tareas en paralelo, y el énfasis está en el rendimiento (ejecutar la mayor cantidad de código de aplicación posible), por lo tanto, utiliza un sistema operativo de tiempo compartido , es decir, cada tarea Hay un intervalo de tiempo . Cuando el intervalo de tiempo asignado por una tarea se agota, se intercambia automáticamente (programación) y luego se ejecuta la siguiente tarea.

Cuando normalmente escribimos programas de cliente ordinarios en la plataforma x86, rara vez necesitamos especificar la estrategia de programación y la prioridad de la aplicación , y usamos el mecanismo de programación predeterminado del sistema. A la inversa, es decir, en determinadas situaciones en las que sea necesario, se puede establecer la estrategia de programación y la prioridad del proceso.

Por ejemplo, en un sistema Linux, se pueden establecer tres estrategias de programación a través de las funciones del sistema : sched_setscheduler()

  1. SCHED_OTHER: La estrategia de programación predeterminada del sistema, que calcula la prioridad dinámica (contador + 20-agradable) y la coloca al final de la cola lista cuando se agota el intervalo de tiempo;
  2. SCHED_FIFO: Estrategia de programación en tiempo real, programación según prioridad, una vez ocupada la CPU se ejecutará hasta que abandone la ejecución o tenga una tarea de mayor prioridad a ejecutar;
  3. SCHED_RR: también es una estrategia de programación en tiempo real, que agrega un intervalo de tiempo sobre la base de SCHED_FIFO. Durante la ejecución, puede ser interrumpida por tareas de mayor prioridad, si no hay una tarea de mayor prioridad, cuando se agote el tiempo de ejecución de la tarea, buscará tareas de la misma prioridad para ejecutar.

1. ¿Por qué el sistema Linux es suave en tiempo real?

Algunos amigos pueden tener preguntas: Dado que la estrategia de programación basada en prioridades SCHED_FIFO se proporciona en el sistema Linux , ¿por qué no se le puede llamar un sistema operativo en tiempo real realmente duro ? Esto comienza con el historial de desarrollo de Linux.

Al comienzo del diseño, el sistema operativo Linux se desarrolló para aplicaciones de escritorio. En esa época, se conectaban múltiples terminales (teletipos y pantallas) al mismo host de computadora, lo que necesitaba hacer frente a operaciones multitarea y en paralelo . Considere la posibilidad de hacerlo en tiempo real rendimiento. Por lo tanto, algunos genes en el kernel de Linux afectan seriamente su rendimiento en tiempo real. Por ejemplo, hay varios factores como los siguientes:

(1) El kernel no puede ser reemplazado

Sabemos que cuando se ejecuta una aplicación, se puede ejecutar en modo usuario y modo kernel (cuando se llama a una función del sistema, por ejemplo: escribir, ingresará al modo kernel para su ejecución). En este momento, la tarea no es interrumpible .

Incluso si una tarea de mayor prioridad está lista, la tarea actual no se puede detener inmediatamente. En su lugar, debe esperar hasta que la tarea actual vuelva al modo de usuario , o cuando necesite esperar un recurso en el modo de kernel y dormir , entonces se puede ejecutar la tarea de alta prioridad.

Por lo tanto, es obvio que no se puede garantizar el desempeño en tiempo real de las tareas de alta prioridad.

(2) Bloqueo giratorio

Un bloqueo de giro es un bloqueo utilizado para la sincronización de múltiples subprocesos . Es un mecanismo de sincronización para recursos compartidos. El subproceso verifica repetidamente si la variable de bloqueo está disponible. Debido a que el hilo sigue ejecutándose durante este proceso, es una espera ocupada. Una vez que se adquiere el bloqueo de giro, el hilo mantendrá el bloqueo hasta que el bloqueo de giro se libere explícitamente.

El bloqueo de giro evita la sobrecarga de programación del contexto del proceso, por lo que es efectivo para la ocasión en que el hilo solo se bloqueará por un corto tiempo , es decir, solo es adecuado usar el bloqueo de giro cuando el hilo está bloqueado por un corto tiempo. tiempo.

Sin embargo, durante el período de bloqueo de giro, la prioridad de la tarea fallará, es decir, incluso si el tiempo de bloqueo del bloqueo de giro es muy corto, esto aumentará el retraso de la prioridad de la tarea y hará que la programación sea incierta .

(3) La prioridad de la interrupción es la más alta

En cualquier momento, siempre que ocurra una interrupción, la rutina del servicio de interrupción se ejecutará inmediatamente, es decir, la prioridad de interrupción es la más alta . Solo cuando se procesan todas las interrupciones externas y los terminales suaves se pueden ejecutar las tareas normales.

Esto parece algo bueno, pero piénselo, ¿qué pasa si hay tareas con mayor prioridad que las interrupciones? Si el sistema se está ejecutando y el puerto de red continúa recibiendo datos, la interrupción siempre se ejecutará y es posible que otras tareas no tengan la oportunidad de ejecutarse . Este es un gran desafío que afecta el rendimiento en tiempo real del sistema Linux.

(4) Apague la interrupción durante el funcionamiento sincrónico

Si observa el código del kernel de Linux, puede ver que la instrucción de interrupción se ejecuta en muchos lugares.Si ocurre una interrupción durante este período, no se puede garantizar el tiempo de respuesta de la interrupción.

2. ¿Cómo cambiar el sistema Linux a tiempo real duro?

Los diversos factores descritos anteriormente plantean grandes obstáculos para la realización del rendimiento en tiempo real real de Linux , pero de hecho hay muchas ocasiones en el mundo real que requieren que Linux tenga un tiempo real difícil, por lo que se deben proponer soluciones para cada uno de los anteriores. factores .

Actualmente existen 2 soluciones principales:

  1. Solución de un solo kernel: parche el kernel de Linux para resolver los problemas mencionados anteriormente, por ejemplo: RT-Preempt;
  2. Solución de doble núcleo: por encima de la capa de abstracción de hardware, ejecute dos núcleos: kernel en tiempo real + kernel de Linux, que proporcionan funciones API a la capa superior, por ejemplo: Xenomai;

Estas dos soluciones tienen diferentes implementaciones, según la situación de la investigación se utilizan más RT-Preempt y Xenomai, veamos sus ventajas y desventajas.

(1) RT-Prevención

Este método es principalmente para parchear el kernel de Linux , que resuelve los problemas mencionados anteriormente: el kernel no puede ser reemplazado, bloqueos de giro, interrupciones de apagado y problemas de prioridad de terminal.

En cuanto a cómo se resuelve cada problema, no lo presentaré aquí debido al espacio. Los amigos interesados ​​pueden obtener más información al respecto si es necesario.

Debido a que está parcheado directamente en el kernel de Linux (definitivamente se fusionará con la rama principal en el futuro), para el desarrollo de aplicaciones, las funciones de la interfaz API proporcionadas por el sistema operativo a la capa superior pueden permanecer sin cambios , lo cual es importante para la aplicación. el desarrollo es algo bueno.

(2) Xenomai

Xenomai es un marco de desarrollo en tiempo real del kernel de Linux. Espera proporcionar aplicaciones de espacio de usuario con un rendimiento completo e independiente de la interfaz en tiempo real mediante una integración perfecta en el entorno Linux. El siguiente es el diagrama de arquitectura de Xenomai:

Por encima de la capa de abstracción de hardware, hay dos dominios paralelos (kernels) , que respectivamente proporcionan sus propias funciones de interfaz API a la capa superior .

En la figura, glibc es una función de biblioteca proporcionada por el sistema Linux, y las aplicaciones escriben programas llamando a funciones de biblioteca y llamadas al sistema.

Xenomai también proporciona la función de biblioteca correspondiente libcobalt . Esta función de biblioteca debe compilarse e instalarse a nivel de usuario, al igual que instalar una biblioteca de terceros.

Además, Xenomai también se refiere a diferentes estilos de sistema operativo y proporciona varios conjuntos de funciones API (anteriormente: máscaras). Las funciones de la interfaz API están aquí :

Como puede verse en la figura, la interfaz API de Alchemy proporciona funciones más completas, proporcionando: temporizadores, gestión de memoria, variables de condición, eventos, bloqueos mutex, colas de mensajes, tareas (pueden entenderse como subprocesos) y otras funciones API.
Las funciones específicas de este conjunto de funciones API son aproximadamente las mismas que las del estándar POSIX y existen algunas diferencias en algunos detalles.

Dado que Xenomai proporciona un conjunto independiente de funciones API a la capa de aplicación , si necesitamos crear tareas en tiempo real, debemos llamar a este conjunto de funciones de interfaz para crear tareas, incluido el uso de algunos de los recursos (por ejemplo: asignación de memoria). Y el documento también destaca algunos puntos de atención, por ejemplo: algunos recursos no se pueden mezclar entre los sistemas Xenomai y Linux.

5. Ventajas de RTOS

Como se mencionó anteriormente, el objetivo principal del sistema de escritorio Linux es el rendimiento , ejecutando más código por unidad de tiempo.

Pero para el microcontrolador, el objetivo principal no es el rendimiento, sino la certeza . Por lo tanto, un indicador importante de la solidez de un sistema operativo en tiempo real es el tiempo necesario para que el sistema complete la tarea desde que recibe una tarea. En otras palabras, la programación de tareas es la primera consideración .

En el desarrollo de microcomputadoras de un solo chip, generalmente existen dos modelos de programación: basado en máquina de estado (funcionamiento desnudo) y basado en RTOS .

Si se basa en una máquina de estado, no hay problema de programación de tareas, porque solo hay una secuencia de ejecución, todas las operaciones se ejecutan en serie y el único flujo de control que necesita atención es el procesamiento de interrupciones .

Si se basa en RTOS, el uso principal es la programación de tareas para lograr un verdadero tiempo real difícil . Lo mejor de esta área es VxWorks, por supuesto, que el precio es muy impresionante, algunas empresas después de la compra, además de incluso poner los módulos del módulo de programación de tareas además de reescribirlo todo, lo que es suficiente para demostrar que efectivamente el proceso de programación de tareas de VxWorks es muy poderoso, estas son también sus habilidades de limpieza!

Por supuesto, para los programas clave que son simples y requieren un control estricto de la secuencia de ejecución, utilizando el marco de programación de la máquina de estados finitos , todo está bajo su propio control. Mientras no haya errores en el código, entonces, en teoría, todos los comportamientos están bajo control, por lo que muchos equipos militares usan microcomputadoras de un solo chip.

Seis, resumen

El tema de la programación de tareas es la máxima prioridad de un sistema operativo, y todavía hay muchas cosas que aprender. Recientemente, acabo de comprar un nuevo libro del Sr. Chen Haibo, quien es el alma detrás del sistema Hongmeng de Huawei.

Si tiene una nueva experiencia de aprendizaje, compártala con todos.


referencias:

https://linuxfoundation.org/blog/intro-to-real-time-linux-for-embedded-developers/
https://wiki.archlinux.org/index.php/Realtime_kernel_patchset
http://www.faqs.org / faqs / realtime-computing / faq /
https://xenomai.org/documentation/xenomai-3/html/README.INSTALL/


Los buenos artículos deben enviarse; cuanto más compartas, más afortunado eres.


Lectura recomendada

[Lenguaje C]

Puntero del lenguaje C: desde los principios subyacentes hasta habilidades sofisticadas, use gráficos y código para ayudarlo a explicar
los principios de depuración subyacentes del gdb original, tan simple
análisis paso a paso, cómo usar C para implementar programación orientada a objetos para
mejorar el la poderosa herramienta del código: definición de macros: desde la entrada hasta el abandono,
use setjmp y longjmp en el lenguaje C para implementar la captura de excepciones y las corrutinas

[Programación de aplicaciones] Se
dice que la arquitectura del software debe dividirse en capas y en módulos, y qué se debe hacer específicamente (1) Se
dice que la arquitectura del software debe dividirse en capas y en módulos, y qué se debe hacer específicamente ( 2)
Desarrollo de pasarela de IoT: basado en el bus de mensajes MQTT Proceso de diseño (encendido)
Desarrollo de pasarela de IoT: proceso de diseño basado en el bus de mensajes MQTT (abajo)
mi forma favorita de comunicación entre procesos-bus de mensajes

【Internet de las Cosas】

Los aspectos relacionados con el cifrado y los certificados
profundizan en el lenguaje de secuencias de comandos LUA, lo que le permite comprender completamente el principio de depuración.

[Tonterías] Basado
en mi experiencia laboral fallida: algunos consejos para técnicos que son nuevos en el lugar de trabajo

Supongo que te gusta

Origin blog.csdn.net/u012296253/article/details/114881275
Recomendado
Clasificación