¿Cuáles son los factores que afectan el rendimiento en tiempo real de RTOS?

Seguir + estrella cuenta oficial , no te pierdas contenido emocionante

aa888dc69b0f8aa7ded3b00e1ef37732.gif

Reenviado desde | Base integrada

RTOS: Sistema operativo en tiempo real, nombre completo: sistema operativo en tiempo real.

Una característica importante: ¡ en tiempo real! ! !

Compartí un artículo con ustedes antes "Sistema operativo en tiempo real RTOS, ¿es realmente en tiempo real?" ", hoy les compartiré brevemente ¿cuáles son los factores que afectan el rendimiento en tiempo real de RTOS?

descripción general

En los sistemas integrados en tiempo real, generalmente existen altos requisitos para el rendimiento en tiempo real, entonces, ¿qué es el rendimiento en tiempo real?

Tiempo real: el tiempo desde la ocurrencia del evento hasta la respuesta del sistema.

Pero en la programación de aplicaciones reales, a veces el sistema no tiene rendimiento en tiempo real debido a una determinada pieza de código, entonces, ¿cuáles son los factores que afectan el rendimiento en tiempo real?

  • La tarea en el hilo está bloqueando

  • Interrumpir operaciones relacionadas

  • Operaciones relacionadas con la sección crítica

La tarea en el hilo está bloqueando

Necesidad de evitar ejecutar tareas de bloqueo en hilos en tiempo real:

  • Evite los subprocesos que esperan liberar semáforos, liberar bloqueos y colas bloqueadas, etc. . .

  • Evite usar la función de retraso para operaciones de retraso. Cuando se requiera retraso, considere usar el ciclo de ejecución del subproceso en tiempo real para llamar a la función periódicamente.

/*
  PeriodFunc()函数的运行周期为10ms
  period_ms为RTThread线程的运行周期
*/
void PeriodFunc(uint32_t period_ms) {
  static uint8_t run_period_ms = 10;
  static uint8_t current_period_ms = 0;

  current_period_ms += period_ms;
  if(current_period_ms >= run_period_ms) {
    current_period_ms = 0;
    /* user code */
  }
}
void RTThread(void *args) {
  while(1) {
    /* 
      使用该方法一定要保证线程的运行周期时准确的,
      否则函数的运行周期将不会准确 
    */
    PeriodFunc(1);
    DelayMs(1);
  }
}

Interrumpir operaciones relacionadas

1. Fuera de tiempo

Hay algunas secciones críticas de código en el programa. Si desea acceder de manera segura, debe desactivar las interrupciones. Luego, desactive la interrupción total antes de acceder a este código y active la interrupción total después de acceder. Durante este tiempo, el El sistema no puede responder a ninguna interrupción externa Esta sección El tiempo es el tiempo de interrupción.

2. Tiempo máximo de apagado

Se refiere al mayor tiempo de apagado de tantos códigos de sección crítica, es decir, este tiempo representa el tiempo de apagado de la interrupción del peor de los casos, porque muchos problemas de tiempo en los sistemas operativos en tiempo real se basan en el peor de los casos considerados. abajo.

3. Tiempo de respuesta a interrupciones

El tiempo transcurrido desde la recepción de esta interrupción hasta la ejecución de la primera declaración de la función de servicio de interrupción correspondiente a esta interrupción. Su fórmula de cálculo es:

Tiempo de respuesta a la interrupción = tiempo máximo de interrupción + tiempo para proteger los registros internos de la CPU + tiempo de ejecución para ingresar a la función de servicio de interrupción (encontrará la dirección o entrada correspondiente de la función de servicio de terminal de acuerdo con la tabla de vectores de interrupción) + comenzar a ejecutar la rutina de servicio de interrupción (ISR) tiempo de primer comando

4. Interrupción del tiempo de recuperación

Se refiere al tiempo transcurrido desde la respuesta exitosa a la interrupción (es decir, el momento en que comienza a ejecutarse la primera instrucción de la rutina de servicio de interrupción (ISR)) hasta la finalización de la ejecución de la función de servicio de interrupción y luego a la ejecución del siguiente código que vuelve a la tarea interrumpida. Su fórmula de cálculo es:

Tiempo de recuperación de interrupción = el tiempo requerido para la ejecución de la función de servicio de interrupción (esto no es exacto, lo que significa que el tiempo requerido para la ejecución básica no está incluido, y se llamará a la función OSIntExit() antes de salir de la función de servicio de interrupción ) + OSIntExit() (esta función está en Se llama al final de la función de servicio de interrupción, y el cambio de tarea ocurre antes de salir de la interrupción) + OSIntCtxSw() (la función que realmente ocurre el cambio de tarea realizará operaciones como registrar ventana emergente de datos)

Operaciones relacionadas con la sección crítica

1. Sección crítica básica

La sección crítica es un método muy primitivo de proporcionar exclusión mutua.El método de ingresar a la sección crítica utiliza el bloqueo de interrupción para desactivar todas las interrupciones (por supuesto, la tarea no se puede programar). El código en la sección crítica debe tener un tiempo de ejecución muy corto, de lo contrario, afectará negativamente el tiempo de respuesta de la interrupción.

El método de usar bloqueos de interrupción para operar secciones críticas se puede aplicar a cualquier ocasión, y otros tipos de métodos de sincronización se implementan basándose en bloqueos de interrupción.Se puede decir que los bloqueos de interrupción son los métodos de sincronización más poderosos y eficientes. El principal problema con el uso del bloqueo de interrupción es que durante el período en que la interrupción está desactivada, el sistema ya no responderá a ninguna interrupción y no podrá responder a eventos externos. Por lo tanto, los bloqueos de interrupción tienen un gran impacto en el rendimiento en tiempo real del sistema. Cuando se usan incorrectamente, el sistema no tendrá ningún rendimiento en tiempo real (puede hacer que el sistema se desvíe por completo de los requisitos de tiempo requeridos). Y si se usa correctamente, se convertirá en un método de sincronización rápido y eficiente.

2. Área crítica de la tarea

Un planificador pendiente también se conoce como planificador de bloqueo. La sección crítica básica es proteger una pieza de código para que no sea interrumpida por otras tareas o interrupciones, mientras que la sección crítica implementada por el programador de suspensión solo puede proteger una pieza de código para que no sea interrumpida por otras tareas y no puede restringir las interrupciones, porque en de esta manera, las interrupciones están habilitadas.

------------  FIN  ------------

56931c7bde6b7ec47a57be2b5587405f.gif

●Columna "Herramientas integradas "

●Columna "Desarrollo integrado"

●Columna "Tutorial de Keil"

●Tutoriales seleccionados en la columna incrustada

Preste atención a la cuenta oficial y responda " Jiagroup " para unirse al grupo de intercambio técnico de acuerdo con las reglas, y responda " 1024 " para ver más contenido.

29a7879ac3223e9ce2270200e5b9a936.jpeg

efb4604c100e0f5b484a7dbbd6ac8267.png

Haga clic en " Leer el texto original " para ver más información compartida.

Supongo que te gusta

Origin blog.csdn.net/ybhuangfugui/article/details/131929055
Recomendado
Clasificación