Por primera vez, me gustaría mencionar que soy un novato en la programación de sistemas en tiempo real. Por eso no estoy seguro de si mis preguntas son correctas. Lo siento pero necesito ayuda
Pregunta breve: ¿Cómo implementar un software en tiempo real para asegurarse de que cumpla con los plazos de entrega? ¿Es necesario usar algunas características de QNX? ¿O es suficiente escribirlo para Linux, puerto a QNX y será en tiempo real por defecto?
Pregunta completa: Hemos implementado un complejo software multiproceso multiplataforma con comunicación entre procesos para Linux, Windows, Android y QNX. El lenguaje de programación es C ++, utilizamos Boost y planty de otras bibliotecas. Nuestro software hace su trabajo bien y rápidamente, pero sigue siendo un prototipo. Para fines de producción, debemos hacerlo en tiempo real. Algunas de nuestras funciones tienen que ser en tiempo real y muy robustas porque son muy importantes y la seguridad de las personas que usan nuestro software puede depender de ellas. Funcionan bastante rápido, hasta cientos de milisegundos. Pero no estoy seguro de que nuestro sistema sea realmente en tiempo real debido a este hecho (¿estoy en lo cierto?).
Entonces, hay una pregunta principal: ¿cómo modificar nuestro software para que sea en tiempo real? He buscado mucho en Google pero todavía no tengo idea de cómo hacerlo.
Alguna información adicional sobre nuestras plataformas: Linux y Windows que actualmente utilizamos solo con fines de prueba. Android: todavía no hemos decidido si lo necesitamos. QNX: es nuestro sistema operativo objetivo para la producción. Supongo que la respuesta para mi próxima pregunta es "NO" :) Pero, ¿es posible implementar software multiplataforma en tiempo real (para sistemas operativos en tiempo real (RTOS) y para sistemas operativos de propósito general (GPOS))?
¿Posiblemente necesitamos hacer nuestros esfuerzos para implementar todas las funciones en tiempo real solo para QNX? Pero todavía no entiendo cómo hacerlo. ¿Podría alguien arrojar una luz sobre esta pregunta?
Respuestas:
Rápido no significa en tiempo real y en tiempo real no significa rápido.
En tiempo real significa que la fecha en que se entrega el resultado es tan importante como su valor. En otras palabras, si el resultado tiene un valor correcto pero se entrega demasiado pronto o demasiado tarde, entonces el resultado general es incorrecto.
Por ejemplo, piense en un reproductor de video. Si los cuadros de video no se muestran a la velocidad correcta, los usuarios no estarán satisfechos. Peor si la imagen y el sonido no están sincronizados.
Este ejemplo muestra que algunas aplicaciones en tiempo real se pueden implementar en sistemas operativos actuales de uso general.
Pero hay una distinción entre el tiempo real duro y el tiempo real suave con respecto a las consecuencias de un incumplimiento de la fecha límite: en los sistemas suaves en tiempo real, esto es solo una molestia o un servicio degradado (piense en imágenes congeladas durante varios segundos en el ejemplo del reproductor de video), mientras que es una falla (potencialmente catastrófica) en un sistema de tiempo real difícil, como en una planta de energía nuclear.
fuente
Como ya dijo @mouviciel , en tiempo real y rápido son realmente dos propiedades independientes, aunque muchos plazos en tiempo real implican que se necesita una respuesta relativamente rápida.
Al escribir software en tiempo real, la propiedad más importante junto a una respuesta correcta es que puede predecir con precisión qué tan rápido se dará la respuesta. Para funciones duras en tiempo real, incluso debe ser capaz de garantizar que se cumpla el plazo en todas las condiciones posibles, salvo una falla de energía completa.
Las fuentes típicas de imprevisibilidad se pueden encontrar en
No digo que deba evitar esas áreas (como probablemente no pueda), pero debe ser consciente de cómo pueden afectar la facilidad con la que puede predecir que cumplirá los plazos en tiempo real para las funciones relevantes.
fuente
Supongo que la explicación de dos oraciones del tiempo real es que un sistema en tiempo real está diseñado para comprender y controlar el tiempo de respuesta en el peor de los casos desde el cambio de entradas hasta el cambio de salidas.
Eso requiere un análisis que cubra todo el sistema. Digamos que tiene un sistema trivial que consiste en un teclado USB y un servo de freno. ¿Qué capacidad de respuesta puede lograr con este sistema? Puede que tenga que considerar:
En este tipo de entorno también suele haber una consideración especial para la confiabilidad, como los estándares MISRA C.
fuente
avoiding use of garbage collection
- Esto debería seravoiding use of non-deterministic memory management
. La recolección de basura se puede realizar en tiempo real y la gestión manual de la memoria no es necesariamente determinista (consulte lamalloc
implementación típica para C).