Prioridades de interrupción: ¿Qué significa realmente?

1

Tengo una pregunta genérica con respecto a las interrupciones. Mi software tiene 2 interrupciones, digamos interrupt_x (timer), interrupt_y (spi).

Ambas interrupciones tienen su propio ISR. Interrupt_x tiene mayor prioridad que interrupt_y. ¿Qué significa realmente asignar prioridades? ¿Significa que Interrupt_x e interrupt_y interrumpirán realmente el núcleo cuando se supone que debe hacerlo, pero el ISR correspondiente solo se ejecutará en función de su prioridad? ¿O significa que interrupt_x evitará que interrupt_y interrumpa el núcleo cuando ambas interrupciones suceden juntas, porque interrupt_x tiene una mayor prioridad y debido a que su ISR se ejecuta en consecuencia? La CPU es RL78 / G14

    
pregunta user180742

2 respuestas

3

Un controlador de interrupción de prioridad tiene cierta funcionalidad básica que comparte prácticamente todo este tipo (como se señaló, ciertos detalles varían según el dispositivo).

Un ejemplo de un tipo podría ser útil.

Digamos que tengo un controlador de prioridad con 3 niveles, A, B y C y que el orden de prioridad es A más alto, B a continuación, C más bajo y cada uno ha sido asignado a un evento en particular (tal vez temporizadores, tal vez un estado de pin) cambio)

Lo que posiblemente podría suceder es esto:

Se produce la interrupción C; Como actualmente no hay ninguna otra interrupción pendiente, se toma el vector de interrupción.

Antes el controlador de interrupciones para C se completa, se produce la interrupción A; el controlador de interrupción para C se suspende y se toma el vector de interrupción para la interrupción A (porque la interrupción A tiene una prioridad más alta).

Antes del controlador de interrupciones para el acabado A, se produce la interrupción B; el controlador de interrupción para la interrupción A continúa (porque B tiene una prioridad más baja) hasta que se completa y la ejecución vuelve al controlador de interrupción C (porque ahí es donde estaba el procesador cuando se produjo la interrupción A).

El vector de interrupción se toma inmediatamente para la interrupción B (porque tiene una prioridad más alta que la interrupción C) y completa el controlador.

La ejecución ahora vuelve a interrumpir el controlador C, que ahora puede completarse (suponiendo que ninguna de las otras dos interrupciones ocurra en ese momento).

Este es solo un tipo de arquitectura de controlador, pero puede darle una idea de lo que hacen estas cosas.

    
respondido por el Peter Smith
1

Hablando en general:

  • Que haya 3 interrupciones con diferentes niveles de prioridad. Y todos están habilitados por los registros de habilitación de interrupciones, de modo que el sistema está listo para las interrupciones. Las interrupciones son solo señales provenientes de circuitos externos y, por lo tanto, pueden ocurrir en cualquier momento. ISR es la tarea que debe realizar el controlador cuando se produce una interrupción. Cuando se produce una interrupción, se establece el indicador de interrupción correspondiente. Y se ejecuta el ISR correspondiente. Finalmente, la bandera se borra al final de ISR para aceptar más interrupciones del mismo tipo.
  • Si los 3 ocurrieron al mismo tiempo, sus ISR se ejecutarán en el orden de sus prioridades.
  • Supongamos que ocurren en diferentes momentos. Diga que la ISR de mayor prioridad se está ejecutando ahora. No se verá afectado incluso si el resto se produjeron dos interrupciones de prioridad más baja entre ellas, juntas o en momentos diferentes. Pero ellos han puesto sus banderas y por lo tanto podemos decir que están en modo "pendiente". Se ejecutarán según sus prioridades, una vez que finalice nuestra ISR de mayor prioridad.
  • Supongamos que se está ejecutando un ISR de prioridad más baja. Si se produjo una interrupción de prioridad más alta en el medio, el ISR de menor prioridad se "detiene" y el ISR de mayor prioridad comenzará la ejecución. Una vez finalizado, el ISR de menor prioridad puede "reanudarse" desde donde se encuentre "pausado".
  • En resumen, una interrupción de mayor prioridad puede "interrumpir" la ejecución de un ISR de menor prioridad en cualquier momento (lo que se conoce como preferencia en interrupciones anidadas), mientras que una prioridad más baja no puede anticipar un ISR de mayor prioridad. Solo puede esperar o permanecer "pendiente". Sin embargo, si se admite la interrupción anidada, sus prioridades, niveles de anidación, todos dependen de la arquitectura. Por lo tanto, debe ir a través de la hoja de datos.
respondido por el MITU RAJ

Lea otras preguntas en las etiquetas