3 votos

Interrupciones preventivas y "cambio de contexto"

En el RTOS, cuando una tarea de mayor prioridad se convierte en Listo para correr se detiene o se adelanta a la tarea que se está ejecutando (de menor prioridad) y comienza a ejecutarse a sí misma. Antes de cambiar de tarea, el RTOS guarda los datos necesarios relacionados con la tarea de menor prioridad (Context Switching)

Volviendo a mi pregunta, al igual que las tareas, las interrupciones también tienen prioridades. Cuando una interrupción de baja prioridad se está ejecutando y una interrupción de alta prioridad viene, ¿qué sucede? ¿Guarda todos los datos en la pila, etc. como el RTOS? ¿Qué pasará con mis variables utilizadas en la ISR?

(Tenga en cuenta que este escenario también es posible en una aplicación no basada en RTOS).

4voto

Stephen Denne Puntos 218

Esto es básicamente totalmente plataforma y depende del compilador. Algunos MCUs/CPUs tienen hardware para guardar parte o parte de la pila, otros no.

Además, el guardado/carga de la pila está determinado por el compilador en algunas plataformas. Al menos en los MCUs xmega de atmel, el guardado del contexto depende del código, en lugar del hardware. Por lo tanto, se pueden escribir ISRs desnudos que podrían manipular el contexto anterior sin demasiados problemas.


Básicamente, no hay ninguna regla general aparte de "leer la documentación de la CPU en cuestión".

0voto

Kimball Robinson Puntos 161

Asumiendo que la CPU soporta interrupciones anidadas, y las interrupciones anidadas están habilitadas, y la interrupción de mayor prioridad está habilitada, cuando la interrupción de mayor prioridad se dispara entonces el comportamiento de la CPU será exactamente el que se espera: El contexto de la CPU será empujado a la pila y el punto de ejecución saltará al nuevo vector de interrupción. Cuando la interrupción de mayor prioridad se complete, el contexto de la CPU se recuperará de la pila y el punto de ejecución volverá a donde estaba en la interrupción de baja prioridad.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X