6.6 Arquitectura de ejecución dinámica

6.6.1 Resumen

Antes de comenzar con el contenido de este capítulo, primero comprendamos un concepto básico muy importante en un producto industrial integrado: tiempo real fuerte y tiempo real débil.

La mayoría de los sistemas integrados con los que solemos entrar en contacto son sistemas débiles en tiempo real, como las lavadoras domésticas. Desde que presionamos el botón de inicio hasta que la lavadora comienza a lavar la ropa, el intervalo puede ser de 100ms o 1s, e incluso puede haber un ruido anormal solicitando presionarlo una vez. Debido a que la respuesta es lenta en el mejor de los casos, la experiencia es mala o se producen dos maldiciones, pero no hay otra pérdida, estos sistemas son sistemas débiles en tiempo real.

A diferencia del sistema de tiempo real débil, si el sistema de tiempo real fuerte no funciona correctamente antes del tiempo especificado, tendrá consecuencias muy graves. El dispositivo de protección de microcomputadoras mencionado en este libro es un sólido sistema en tiempo real. En el caso de una falla del sistema de energía, la línea defectuosa debe cortarse dentro de un tiempo específico, de lo contrario, provocará que se quemen equipos eléctricos costosos e incluso causar accidentes extremos, como apagones a gran escala. En el campo de la protección de microcomputadoras, este tiempo específico está en el nivel de ms. En realidad, se llama a reclutar soldados durante mil días y usarlos por un momento. Este tipo de sistema se llama sistema fuerte en tiempo real.

Aunque solo hay una diferencia de una palabra entre tiempo real fuerte y tiempo real débil, existen grandes diferencias en los conceptos de programación. Este curso revelará esta diferencia y lo llevará a experimentar mi viaje de exploración a lo largo de los años.

Además, se debe enfatizar que incluso si es un sistema sólido en tiempo real, la mayor parte del tiempo real sólido se refleja en uno o varios puntos, mientras que otros módulos son sistemas débiles en tiempo real. Por ejemplo, el módulo de comunicación en el dispositivo de protección del microordenador, si en circunstancias normales se requiere enviar la trama de confirmación dentro de los 50ms después de recibir la solicitud, pero incluso si se envía solo 100ms accidentalmente, causará un retraso en la comunicación o retransmisión como máximo, y la pérdida no es grande. Estas características conducen a la necesidad de identificarlas por completo y tratarlas por separado al construir un marco de ejecución de programas para la protección de microcomputadoras. Un tiempo real sólido debe garantizar que la ejecución se complete en un tiempo específico, y los módulos débiles en tiempo real deben ejecutarse lo más rápido posible y lo más estable posible.

A diferencia del sólido sistema ordinario en tiempo real, el dispositivo de protección de microcomputadoras tiene otra característica, que requiere muchos cálculos complicados, lo que aumenta aún más la complejidad del diseño del software. Para la protección del transformador mencionada en este libro, no solo es necesario calcular la corriente trifásica, la corriente diferencial trifásica y la corriente de frenado trifásica en los cuatro lados del transformador, sino también calcular las magnitudes eléctricas del segundo y quinto armónicos de bloqueo. Cada circuito debe ser complicado. El cálculo del filtro adjunto. Cómo garantizar el rendimiento en tiempo real bajo la premisa de satisfacer estos cálculos es un factor importante que debe tenerse en cuenta en la protección del transformador.

La fórmula para calcular la cantidad eléctrica de cada canal es la siguiente, y la conversión a un algoritmo de computadora es una serie de operaciones de multiplicación y suma. La transformación de la forma Fu a menudo se conoce como una de las fórmulas matemáticas más hermosas y es la base de muchas materias de ingeniería. Como sigue:

Inserte la descripción de la imagen aquí

◇◇◇

Hay otro malentendido que tiende a la organización dinámica del programa.

Al comunicarse en Internet, muchas personas a menudo se quejan de que los productos de su empresa son demasiado bajos y ni siquiera usan el sistema operativo. Parece que si se usa el SO, es un producto de alto nivel, y si no, es un producto de bajo nivel. También hay muchos estudiantes universitarios que dicen que el aprendizaje integrado se siente como si estuvieran aprendiendo Linux Finalmente, solo llamaron a algunas funciones de interfaz y aprendieron un poco de conocimiento.

Para aprender sobre sistemas integrados industriales, personalmente recomiendo comenzar desde un sistema básico y una CPU simple, tratar de construir un entorno de desarrollo, configurar algunos registros, simplemente escribir algunos controladores, contactar interrupciones y exclusión mutua, dejar que el programa se ejecute y primero experimentar el software y el hardware El olor del funcionamiento coordinado. En resumen, primero tenga la comprensión general, y luego puede obtener el doble del resultado con la mitad del esfuerzo más tarde.

En este capítulo, lo llevaré a experimentar una variedad de modos de organización de programas integrados Este es también mi viaje de exploración a lo largo de los años.

6.6.2 Punto de partida: sistema delantero y trasero

La estructura de programa más simple en el sistema embebido se llama sistema front-end, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
En esta estructura de programa, la parte principal del programa es un bucle inalámbrico, y cada módulo de tarea se llama a su vez en el bucle. Estamos acostumbrados a usar el programa de bucle principal Llámalo el fondo. La rutina del servicio de interrupción maneja eventos asincrónicos, generalmente configurando la bandera y dejando que sea procesada por la tarea en segundo plano, que se llama primer plano. (Nota: con la prevalencia de los programas de Internet, los programas de interfaz a menudo se refieren específicamente a los programas de interfaz que interactúan con los usuarios, y los programas en segundo plano se refieren al almacenamiento de bases de datos de varios procesos comerciales, etc. Tenga cuidado de no confundir los conceptos).

Este tipo de estructura de programa es muy baja, pero su vitalidad es muy tenaz. Es casi una estructura general para dispositivos embebidos en tiempo real simples y no fuertes. Tiene muchas ventajas:

  1. La estructura del programa es simple y pequeña, el espacio del programa y el espacio de la memoria RAM son relativamente pequeños, y se puede usar una CPU de muy bajo costo;
  2. Las tareas se ejecutan en serie y casi no hay necesidad de considerar el tema de la sincronización y la exclusión mutua;
  3. En circunstancias normales, la bandera se establece en la interrupción, la bandera se recupera en la tarea en segundo plano y se realiza el procesamiento correspondiente. Basado en este mecanismo, la exclusión mutua de interrupciones y el bucle principal es fácil de manejar, principalmente para evitar que las banderas del programa principal sean interrumpidas y modificadas. La estrategia también es muy simple. Puede aumentar la caché antes de usar las banderas cada vez;
  4. Especialmente adecuado para aplicaciones integradas que requieren ahorro de energía, como varios controles remotos en el hogar, donde el procesador generalmente está en estado detenido y se activa rápidamente a través de interrupciones;

Por supuesto, esta estructura de programa también tiene muchas deficiencias, la principal de las cuales es que el tiempo para que el programa en segundo plano ejecute una vuelta es incierto, lo que hace que su peor tiempo de respuesta sea el tiempo máximo para que el programa principal ejecute una vuelta. Obviamente, esta estructura de programa no cumple con los estrictos requisitos en tiempo real de la protección de microcomputadoras.

6.6.3 Exploración 1: sistema Shuanghuan delantero y trasero

Las primeras CPU integradas eran todas microcomputadoras de un solo chip de 8 bits con un rendimiento extremadamente limitado. Para garantizar la sólida protección en tiempo real de la protección, las tareas en tiempo real solo podían debilitarse. La antigua generación de personal de I + D de protección de microcomputadoras propuso de manera innovadora una estructura de programa de doble bucle, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
todo el programa se divide en dos bucles, el bucle débil en tiempo real ejecuta la comunicación, el cristal líquido y otras tareas débiles en tiempo real, y el bucle fuerte en tiempo real funciona para proteger las cantidades eléctricas. Tareas sólidas en tiempo real como cálculo, juicio lógico y exportación de acciones.

Normalmente ejecute tareas débiles en tiempo real y realice un juicio lógico de inicio rápido durante la interrupción del muestreo.Si se encuentran signos anormales, cambie rápidamente el programa a una operación de tareas en tiempo real fuerte. Cuando se procesa toda la lógica de protección y se restablece todo el grupo, vuelva a la operación de tarea débil en tiempo real.

Este tipo de estructura de programa garantiza el sólido rendimiento en tiempo real del módulo de protección cuando la potencia de cálculo de la CPU es muy escasa en los primeros días, pero también tiene muchas desventajas:

  1. Si desea volver al programa de protección directamente en la interrupción, debe adoptar una estrategia de modificación de la pila de programas, similar a la estrategia de conmutación de tareas del sistema operativo moderno. Sin embargo, nuestras primeras prácticas fueron bastante brutales y no hubo estrategias como el ahorro de registros y el cambio de pila, que destruyeron directamente el débil entorno operativo de tareas en tiempo real original. Cuando todo el grupo regresa, la tarea en tiempo real débil original debe reinicializarse. Este requisito de estructura del programa aumenta la complejidad del programa.
  2. Dependencia excesiva de los componentes de arranque de protección. El elemento de inicio es un programa de evaluación pequeño pero sensible, sin embargo, debido a diferencias en los algoritmos, puede haber situaciones en las que el elemento de protección opera pero el elemento de inicio correspondiente no opera, y se producirá un mal funcionamiento en este momento.
  3. En algunos componentes de protección que requieren mucho tiempo y a largo plazo, la pantalla LCD de comunicación no responderá durante mucho tiempo, y el efecto no es grande cuando la protección del microordenador individual se está ejecutando en la etapa inicial. Sin embargo, como la protección del microordenador se conecta y opera gradualmente en red, esta deficiencia Ya es insoportable.

Recuerdo que cuando entré por primera vez en contacto con este tipo de programa, me acababa de graduar de la universidad y este tipo de habilidades de programación todavía me tocaban mucho. Hay dos ideas importantes:

  1. La estrategia de interrumpir y volver a una tarea sólida en tiempo real es una buena iluminación del sistema operativo, lo que me hace sentir que vendrá naturalmente cuando aprenda SO más tarde. Debido a esta experiencia, cuando luego instruí a los recién llegados a aprender un sistema operativo sólido en tiempo real, a menudo dejo que todos experimenten esta técnica de regresar de la interrupción a otros programas.
  2. Para recuperarse de la excepción, las tareas débiles en tiempo real deben interrumpirse y aún poder reanudar el funcionamiento. Para hacer esto, se necesitan algunas habilidades de programación y hay muchas consideraciones. Más tarde, descubrí que esta es una estrategia muy simple para mejorar la confiabilidad del programa. Para mejorar la confiabilidad, el sistema integrado está en estado de autocomprobación todo el tiempo. Después de descubrir que una determinada tarea es anormal, solía adoptar una estrategia aproximada para restablecer todo el dispositivo. Ahora hay una estrategia muy inteligente para restablecer solo una determinada tarea.

6.6.4 Exploración 2: sistema de anverso y reverso por tiempo limitado

Alrededor de 2000, se comenzó a incorporar gradualmente un único dispositivo de protección de microcomputadora en un sistema integrado, y la conexión en red se convirtió en el requisito más básico. El sistema original de doble anillo frontal y posterior ya no podía satisfacer la demanda. Además, en este momento comenzaron a aparecer varios cpus embebidos de 32 bits, como el clásico microordenador de un solo chip MC68332. En comparación con los primeros 51 microordenadores de un solo chip, se puede decir que la velocidad es un gran aumento. En este contexto, adoptamos una nueva estrategia de programación de programas. Debido a que esta estrategia limita estrictamente el tiempo de ejecución de cada tarea en el programa en segundo plano, se denomina sistema de anverso y reverso de tiempo limitado. La estructura del programa se muestra a continuación:
Inserte la descripción de la imagen aquí

La característica más básica de la estructura del programa es garantizar que no importa cuál sea la situación, el módulo de programa de protección fuerte en tiempo real debe ejecutarse dentro del tiempo de respuesta máximo. Recuerde que se acordó que el tiempo de respuesta máximo era de 5 ms, por lo que todas las tareas débiles en tiempo real deben ejecutarse en 5 ms. Basado en este concepto, el bucle principal del programa selecciona una tarea débil en tiempo real y una tarea de protección fuerte en tiempo real cada vez, y las tareas débiles en tiempo real se conmutan y ejecutan a su vez.

Durante el desarrollo de este producto, nos vimos obligados a desarrollar el hábito de probar el tiempo de ejecución de todos los programas. Los resultados de las pruebas son muy sorprendentes y también me hicieron comprender realmente qué es la ley dos-ocho, el 80% del tiempo de la CPU se gasta en el 20% de los programas, especialmente los programas algorítmicos. Esta experiencia nos dice que no tiene sentido dedicar grandes esfuerzos a optimizar el código de proceso ordinario, y puede ser valioso guardar solo una instrucción de ensamblaje en el programa de algoritmo.

Para garantizar que se puedan ejecutar varias tareas débiles en tiempo real en 5 ms, nos vemos obligados a adoptar muchas habilidades de programación y agregar muchos estados intermedios. Por ejemplo, si la operación de escritura flash tarda 10 ms, por lo tanto, la operación de escritura flash en este momento no puede terminar de enviar el comando de escritura y morir. Necesita registrar el estado intermedio y salir rápidamente, y esperar a que la siguiente ejecución continúe para completar un proceso de escritura completo.

Las habilidades del programa son un arma de doble filo que puede mejorar el nivel de programación de los miembros del equipo del proyecto, pero también aumentará la complejidad del código, que no solo es fácil de cometer errores, sino que también trae dificultades para el mantenimiento y la lectura posteriores del código. Especialmente con el aumento continuo de funciones no protectoras, las deficiencias de este tipo de método de organización de programas de tiempo limitado al frente y al revés también son cada vez más prominentes, y nos vemos obligados a volver a la carretera.

6.6.5 Exploración 3: interrupción de tareas virtuales

Hoy en día, al mencionar el dispositivo de protección de microcomputadoras, se acostumbra decir que la protección de microcomputadoras es un dispositivo inteligente que integra protección, medición, control, monitoreo, registro de ondas, comunicación y otras funciones. De hecho, este no era el caso en los primeros días. Con una potencia de procesamiento de CPU integrada y recursos de software y hardware limitados, los dispositivos de protección y los dispositivos de medición y control se separaron. Más tarde, con el rápido desarrollo de las CPU integradas, para ahorrar costos, se fueron integrando lentamente.

Bajo la nueva tendencia, hay cada vez más módulos de software en tiempo real débiles en los dispositivos de protección, y la proporción de programas de protección está disminuyendo gradualmente.Los sistemas originales de front-end y back-end de tiempo limitado se han vuelto muy embarazosos. La nueva tendencia de desarrollo requiere que la nueva organización del programa sea compatible ¿Cómo solucionar este problema?

En el sistema front-end de tiempo limitado, con el fin de garantizar las sólidas características en tiempo real del módulo de protección, se plantean altos requisitos para el módulo débil en tiempo real. Ahora que el código débil del módulo en tiempo real representa una gran proporción, ¿puedo cambiarlo? El cambio de mentalidad ha traído consigo una nueva forma de organización del programa, como se muestra en la siguiente figura: A
Inserte la descripción de la imagen aquí
diferencia del modo de organización anterior, solo una capa de muestreo y filtrado interrumpe el programa en primer plano. En este momento, se usa una capa adicional de interrupción en primer plano para la protección de la ejecución y un fuerte tiempo real Módulo, estamos acostumbrados a llamarlo interrupción de protección. Para garantizar un rendimiento sólido en tiempo real, la interrupción de protección es una interrupción del temporizador de 5 ms, pero en este momento también trae una restricción adicional: el programa de interrupción de protección debe ejecutarse dentro de los 5 ms.

Con la nueva arquitectura, la estrategia de optimización del tiempo se centra en módulos sólidos en tiempo real. Los módulos débiles en tiempo real se pueden escribir de forma tradicional. Al mismo tiempo, con la rápida mejora de la potencia de cálculo de la CPU, los módulos sólidos en tiempo real son más fáciles de comprimir hasta completarlos en 5 ms, lo mejor de ambos mundos . Incluso si hay un signo de activación de protección en la interrupción de muestreo, podemos ajustar el temporizador de interrupción de protección para que se inicie con anticipación, optimizando aún más el tiempo de acción de protección.

Desafortunadamente, las nuevas estrategias siempre encontrarán nuevos problemas. El mayor inconveniente de esta estrategia es que las interrupciones ocupan demasiado tiempo de CPU. Nuestros datos medidos ese año mostraron que las interrupciones de protección y muestreo en el dispositivo de protección diferencial del transformador representaron casi el 40% de la CPU. carga. Y debido a que la prioridad de la interrupción de protección y la interrupción de muestreo es relativamente alta, afecta a otros módulos, como la comunicación en serie.
Inserte la descripción de la imagen aquí
Debido a que la interrupción es intensa y la carga de la CPU es pesada, la interrupción del puerto serie a menudo se pierde, lo que resulta en una comunicación anormal. En este caso, debe insertar el programa de consulta del puerto serie en la tarea de interrupción. Al principio, con la ayuda del búfer en el módulo uart, era difícil lograr una velocidad de 9600 baudios, pero si desea continuar incrementándola, hará que el rendimiento de la tarea de protección disminuya y la compensación es bastante difícil.

6.6.6 Exploración 4: Introducción de un sólido sistema operativo en tiempo real por primera vez

Las tareas virtuales en el modo de interrupción ya están muy cerca del mecanismo de programación del sistema operativo, y también trae una serie de nuevos problemas, o simplemente vaya más allá y elija directamente un sistema operativo sólido en tiempo real. Después de un peso "serio" dentro del equipo, y recién terminé de aprender UCOS y estaba de buen humor, finalmente dimos un paso crucial, sin embargo, no esperábamos recibirnos con un tiro en la cabeza.

De acuerdo con el principio de uso del sistema operativo, el código en la interrupción debe ser el menor posible. Proponemos el cálculo de filtrado en la interrupción de muestreo original y hacemos la tarea de interrupción de protección. La estructura completa del programa se muestra en la siguiente figura: Lo
Inserte la descripción de la imagen aquí
primero que debe hacer es descubrir el tiempo de respuesta de protección discreta. En aumento, la sensación más intuitiva es que el tiempo de acción de la protección es inestable, a veces rápido y a veces lento. Después de las pruebas, se descubrió que los puertos seriales densos o las interrupciones CAN afectarían el tiempo de respuesta de las tareas sólidas en tiempo real.

El segundo éxito es descubrir que los programas basados ​​en SO no son fáciles de escribir. En el pasado, todos estaban acostumbrados a los sistemas front-end y back-end, y todos los módulos de software eran programas de consulta uno por uno. Ahora, basándonos en la programación de tareas, dimos por sentado que agregamos un sueño al programa de consulta anterior y lo pusimos en el bucle. Finalmente, lamentamos encontrar que aunque la CPU es más rápida, la velocidad de ejecución del programa no es tan buena como antes. Además, es necesario reservar un espacio de pila lo suficientemente grande para cada tarea, y la ocupación de recursos del ariete aumenta considerablemente que antes.

El tercer titular es sobre la estabilidad del programa. Los programas siempre tendrán algunos problemas inexplicables. Debe saber que la mayor parte del código se acumula a través de miles de arduos trabajos, y después de un análisis en profundidad, se encuentra que la fuente proviene de "exclusión mutua sincrónica". No importa cómo se ajuste el mecanismo de programación anterior, es esencialmente la exclusión mutua entre la interrupción y el programa principal, que es relativamente fácil de manejar. En la actualidad, después de que hay múltiples tareas, el punto de exclusión mutua de sincronización comienza a aumentar, y no nos dimos cuenta de esto al principio.

Después de un lanzamiento doloroso, un conjunto de versiones del programa que consumía más recursos, era lento e inestable, todos se quejaron y finalmente tuvieron que volver a la versión anterior. Esta experiencia me hizo darme cuenta por primera vez de que la buena tecnología es un arma de doble filo.

6.6.7 Exploración 5: tareas virtuales de interrupción mejoradas

Aunque fue la primera vez que probé el sistema operativo y regresé a casa, todas las experiencias son valiosas. El primer contacto con OS nos ha traído muchos cambios de pensamiento. Por ejemplo, el mecanismo de sincronización en el sistema operativo simplificará enormemente la estructura del programa. Un programa que solía ser implementado por una máquina de estado ahora solo necesita esperar un evento de sincronización. Entonces, ¿es posible introducir estas estrategias de manera adecuada?

Basándonos en la interrupción de tareas virtuales, hemos hecho algunos intentos de introducir un mecanismo de programación en tiempo real débil en el programa principal para establecer prioridades para varias tareas en tiempo real débiles, no solo el cambio, sino la programación basada en la prioridad. Por supuesto, debido a la debilidad del tiempo real, no se permite la preferencia antes de que se ejecute cada tarea. La estructura del programa se muestra en la siguiente figura:

Inserte la descripción de la imagen aquí
De manera similar al principio de funcionamiento del sistema operativo, también construimos una tabla lista para tareas. Para simular el semáforo de sincronización, permite una programación débil en tiempo real recursiva durante el sueño o esperando el semáforo, y además optimizó el módulo temporizador del sistema. Todo el débil mecanismo de programación en tiempo real se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

6.6.8 Nuestra posición actual: marco de ejecución dinámica

El sistema operativo no es solo un conjunto de mecanismos de programación, sino también un conjunto de software intermedio, como sistema de archivos, tcp / ip, pila de protocolos USB, etc. Con la rápida iteración del equipo de protección de microcomputadoras, los protocolos de red, los programas de actualización a través del disco U o la exportación de datos de perturbaciones y otras funciones se han convertido en operaciones comunes para los usuarios en el mantenimiento diario. No tenemos que volver a fabricar ruedas, por lo que no tenemos más remedio que utilizar el sistema operativo.

Afortunadamente, estamos aquí preparados esta vez. Las interrupciones densas del puerto serie afectarán el tiempo de respuesta de la tarea de protección, así que elija un chip que admita el mecanismo DMA; la exclusión mutua síncrona afectará la estabilidad del programa, como se mencionó muchas veces antes, se limitará a la función de interfaz api. El responsable; ……

Además, no solo eso, sino que en función de los requisitos, también creamos un marco de ejecución dinámica.

◇◇◇

Las tareas basadas en el sistema operativo son bucles infinitos, y las tareas basadas en los sistemas front-end y back-end son funciones que se pueden llamar y devolver. Para unificar estos dos tipos de programas, volvimos a extraer las tareas de la aplicación y optimizamos todos los módulos de la aplicación en una serie de funciones de respuesta a mensajes. Por supuesto, si recuerda el modelo distribuido, comprenderá que esta estrategia también facilitará la distribución adicional del programa a múltiples CPU.

Inserte la descripción de la imagen aquí

◇◇◇

Cuando se utiliza un sistema operativo integrado, sigue existiendo un problema: hay muchos tipos de sistemas operativos y es necesario deshacerse de ellos cada vez que los cambia. Usamos el sistema pSos en la etapa más temprana. Después de que se adquirió pSos, tuvimos que cambiar al sistema vxWorks. Más tarde, usé ucos en una CPU simple y usé la simulación de Windows para construir dispositivos virtuales. Recientemente, debido al incidente de ZTE Huawei, todos comenzaron a cambiar lentamente al sistema RT-thread.

Los diferentes sistemas tienen diferentes características y tienen sus propias interfaces API. En los primeros días, usábamos directamente las interfaces del sistema del SO. Esta puede ser la razón de nuestra juventud. También nos gusta explorar completamente las características del uso de varios SO. Desafortunadamente, este Casi se convirtió en una pesadilla para la posterior migración de programas, y fue necesario descartar y reescribir grandes trozos de código.

Para resolver este problema, intentamos construir una capa de abstracción del sistema operativo y optimizamos cuidadosamente un subconjunto más pequeño de funciones para restringir el límite de la capa de aplicación. Este enfoque aporta comodidad a la migración posterior del sistema. El más típico es que la débil estrategia de programación en tiempo real que construimos antes también se puede trasplantar perfectamente, y es fácil completar la reutilización completa del código inicial.
Inserte la descripción de la imagen aquí

◇◇◇

La tarea es el concepto básico en el sistema operativo, el mecanismo de programación del sistema operativo y el portador de recursos en el sistema operativo. Los programas basados ​​en sistema operativo necesitan configurar una pila para cada tarea, pero la memoria en los dispositivos integrados es generalmente un recurso escaso. Demasiadas tareas también aumentarán la carga de la CPU En el campo de la protección de microcomputadoras, la potencia de computación de la CPU también es escasa. ¿Cómo paliar estas contradicciones?

En la práctica, encontramos que siempre existen muchos lugares incómodos para asociar una tarea del SO con un módulo de aplicación. El más típico es el protocolo de comunicación TCP. La estrategia más clásica después de cada conexión de cliente es crear uno nuevo. Tareas, pero esta estrategia provocará demasiadas tareas en el sistema, desperdiciará recursos y afectará la eficiencia de la CPU.

Para resolver estos problemas, separamos las tareas y aplicaciones del sistema operativo, y abstraemos conceptualmente las aplicaciones, incluida una serie de funciones de mensajes y temporizadores. Para facilitar la descripción, llamamos a la tarea del sistema operativo el objeto activo, que es principalmente responsable de la programación de recursos, y el módulo de aplicación se denomina objeto reactivo, que es principalmente responsable de la abstracción de la aplicación. El objeto reactivo debe asignarse al objeto activo para su ejecución, y se pueden asignar varios objetos reactivos al mismo objeto activo.

Basados ​​en mecanismos activos y reactivos, los módulos de aplicación se pueden construir en el modo más cómodo, y la programación de tareas también puede considerar completamente las restricciones como los recursos de hardware, la potencia de cálculo de la CPU y los requisitos en tiempo real.

Inserte la descripción de la imagen aquí
◇◇◇

Al igual que los dispositivos de protección de microcomputadoras, muchos dispositivos industriales integrados requieren un funcionamiento estable y confiable a largo plazo. Para evitar el desorden del programa, se acostumbra construir un módulo de vigilancia en los sistemas frontal y posterior, y la operación de alimentación del perro debe realizarse a intervalos regulares, de lo contrario el sistema se reiniciará. Según el mecanismo de programación basado en el sistema operativo, la estrategia de vigilancia original no es apropiada. Si la tarea de vigilancia por sí sola, muchas tareas pueden haber muerto, pero la tarea de vigilancia sigue funcionando bien.

Para resolver este problema, la estrategia más común es introducir el mecanismo keepAlive. Cada tarea debe informar su estado de ejecución al sistema con regularidad. Si una tarea no informa, es posible que la tarea se haya colgado y sea necesario restablecerla. Por supuesto, esto también requiere que la tarea se reinicie fácilmente.La estrategia más común es construir un proceso de inicialización anormal que solo retroceda el estado intermedio de varios programas, pero las interfaces como la asignación de memoria ya no se pueden llamar.

El diagrama de comparación del mecanismo guardián y keepAlive es el siguiente:

Inserte la descripción de la imagen aquí
◇◇◇

Combinando la capa de abstracción del sistema operativo, los objetos activos y reactivos, el mecanismo de cola de mensajes y otras estrategias, todo el marco de ejecución dinámica se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

Hasta ahora, hemos creado un conjunto de marco de ejecución dinámica adecuado para la protección de microcomputadoras, que también es la estrategia que nuestro equipo está utilizando actualmente. Los diferentes requisitos usarán diferentes sistemas operativos, los dispositivos simples continuarán usando sistemas débiles en tiempo real, las aplicaciones complejas y débiles en tiempo real usan Linux y las aplicaciones sólidas en tiempo real pueden usar ucos u otros sistemas operativos.

Más importante aún, debido a que todos se basan en un marco de ejecución dinámica, sin importar qué sistema operativo se seleccione, la estructura de código anterior es la misma, por lo que existe una base de reutilización entre sistemas.

6.6.9 Reflexión y resumen

Estructura de doble bucle, sistema de tiempo limitado, tareas virtuales interrumpidas, programación débil en tiempo real y, finalmente, arquitectura de ejecución dinámica. Este viaje es casi el epítome de mis 20 años de experiencia laboral. Todo el camino para explorar, hasta cavar hoyos, a menudo los viejos problemas no se han resuelto por completo, surgen nuevos problemas. Mucha emoción en el camino.

A veces, no puedo evitar cerrar el libro y meditar sobre lo que nos hizo arrojarnos todo el camino Después de una cuidadosa consideración, hay dos puntos clave: tendencia y demanda. Lo primero que sufre la peor parte es la tendencia. Las CPU integradas son cada vez más rápidas, los recursos son cada vez más abundantes, varios periféricos se vuelven más inteligentes y varios sistemas operativos se vuelven cada vez más amigables. Bajo esta tendencia, no siempre podemos aferrarnos a las cosas viejas. Si no dejas pasar las cosas, solo puedes dar la bienvenida al futuro con valentía.

La abundancia de recursos ha traído infinitas posibilidades. En el pasado, la protección, la medición y el control requerían dispositivos separados para operar, pero hace tiempo que se integraron, solían ejecutarse en dispositivos separados y ahora pueden admitir protocolos complejos orientados a objetos. La abundancia de software también trae cambios en los modelos de operación y mantenimiento del usuario, e incluso afecta varias estructuras organizacionales, y luego promueve aún más la iteración rápida de requisitos.

Es previsible que el ciclo de tendencias y necesidades continúe repitiéndose. Por lo tanto, nuestro viaje de exploración no se detendrá. Obligará a todos a conducir desesperadamente o caer en la historia.

◇◇◇

Otro conocimiento importante es reconstruir el conocimiento de la tecnología.

Recuerdo que en los primeros días, me gustaba especialmente perseguir nuevas tecnologías, y a menudo me quejaba en el equipo. Esta es la era, todavía usando ensamblador, no en el sistema operativo, todavía no ... Ahora, en mi opinión, la tecnología es solo una dimensión, y lo primero que tengo en mente es el producto, el equipo. La tecnología en sí no es buena o mala, y no hay diferencia entre alta y baja, solo en base al producto y al equipo, seleccionar la tecnología más adecuada es una mejor estrategia.

La mayor parte de lo que usamos es ciencia aplicada, y la nueva tecnología es relativamente rápida de aprender. Incluso si la tecnología no se usa por completo, busque un equipo de servicio y aprendan juntos, usando y aprendiendo, y el ritmo es generalmente rápido. De hecho, lo importante no es la nueva tecnología, sino la capacidad de aprendizaje, que es algo que a menudo enfatizo deliberadamente durante el entrenamiento del equipo.

Tal vez por la influencia de los compañeros de clase o los anuncios, algunos chicos y yo siempre expresamos que quieren aprender una determinada tecnología. A menudo pregunto, ¿se utilizará en el producto actual? Si la respuesta es no, generalmente sugiero que solo eche un vistazo rápido y no estudie en profundidad, porque existe una alta probabilidad de que no se ciña a ella, pero afectará su capacidad de aprendizaje.

Basado en el trabajo, el aprendizaje extendido, cada elemento se consolida, el inicio rápido y el uso rápido, pronto acumulará muchas habilidades de procedimiento, pero también mejorará efectivamente la capacidad de aprendizaje.

◇◇◇

Finalmente, quiero compartir con ustedes un punto de vista: todas las experiencias no son en vano, incluso el mecanismo de recuperación anormal de la tarea inicial en la estructura de doble anillo es un programa de habilidad muy valioso y acumulación de vida.

El camino que he recorrido es para su referencia. Debido a que todos están involucrados en una industria diferente, o debido a diferentes oportunidades, espero que todos puedan recorrer su propio camino de crecimiento maravilloso.

——————————————

Volver al contenido

Soy Xiaomaer, un ingeniero de software integrado que anhela la conciencia y el alma. Dé la bienvenida a su empresa y viaje. Si está interesado, puede agregar una cuenta personal de WeChat nzn_xiaomaer para comunicarse, y debe anotar la palabra " dimensión diferente ".

Supongo que te gusta

Origin blog.csdn.net/zhangmalong/article/details/106729593
Recomendado
Clasificación