¿Hay alguna diferencia entre la tabla de vectores de interrupción y la tabla de prioridad? ¿El nodo vectorial simplemente dice su prioridad? Aquí está la tabla de vectores:
La tabla de vectores de interrupción es simplemente un área de la memoria (a menudo comienza en la dirección 0) para contener todos los posibles vectores de interrupción para un procesador. Por vector, esto significa que cuando ocurre una interrupción, el procesador detendrá lo que está haciendo, y luego vector a la ubicación de memoria reservada para esa interrupción. En un procesador de 32 o 64 bits, puede haber cientos de vectores.
Cada vector está separado por un número fijo de bytes que permite, como mínimo, almacenar un salto allí que saltará al principio de la ISR (rutina de servicio de interrupción) que maneja esa interrupción.
La ubicación de esta tabla, y el orden de los vectores dentro de ella, son una característica del hardware del procesador y no se pueden modificar, excepto en algunos procesadores, la cantidad de bytes asignados para cada vector se puede modificar.
El programa establece las prioridades de interrupción para cada fuente de interrupción que está habilitada. Como ejemplo, pueden variar de 1 (el más bajo) a 7 (el más alto); existen muchos otros esquemas. Si llega una interrupción que tiene una prioridad más alta que la que se está ejecutando actualmente, la actual será interrumpida por la más alta a menos que las interrupciones estén deshabilitadas.
Algunos procesadores incluso permiten que se especifiquen prioridades secundarias dentro de un grupo de prioridad principal. Por lo tanto, esto controlaría lo que sucede cuando llega una interrupción con el mismo nivel de prioridad principal que el que se está ejecutando actualmente.
Sí, hay una diferencia. La tabla vectorial le dice al procesador DÓNDE para ir a ejecutar el código cuando ocurre una interrupción. Si la interrupción está habilitada y su marca está activada, la prioridad le dice al procesador CUANDO se le permite ir allí y ejecutar el código.
Por lo tanto, la interrupción siempre ejecutará el código en la dirección en el vector. Pero si su prioridad es baja y se están ejecutando otras interrupciones de mayor prioridad, puede pasar algún tiempo antes de que realmente se ejecute.
En algunas derivadas de 8051, si obtiene dos interrupciones de prioridad idénticas al mismo tiempo, la interrupción que tiene prioridad está determinada por una "secuencia de sondeo interno", que es del mismo orden que los periféricos que aparecen en la tabla vectorial. . Pero eso no es necesariamente cierto para todos los procesadores. Las implementaciones de los sistemas de interrupción pueden ser muy diferentes.
Entonces, cada vez que recibe una interrupción, va a Vector Table, encuentra número de prioridad apropiado e interrupción, luego salta a una función que es señalado por un valor de Vector Table y ejecuta esa rutina ISR también llamada función de interrupción.
Depende de la arquitectura. Para algunos, la prioridad también puede definirse por el orden de los vectores, dejándole saber la opción, el vector 7 conectado a foo, siempre puede tener una prioridad más alta que el desplazamiento del vector 8 vinculado a la barra.
En general, aunque uno esperaría que la tabla vectorial fuera solo una tabla, la guía telefónica o la agenda de direcciones. A quién llama primero para algún tipo de evento es una lista separada, de esa lista de prioridades obtiene un nombre, luego busca el nombre en la guía telefónica y los llama. Usted está desesperado por comprar pizza y pedir pizza es actualmente más importante que alimentar a la mascota, busca el número de pizza en la tabla de vectores, llame a ese número, luego busque el teléfono celular de sus hijos y haga que alimenten al perro. La tabla de vectores es la lista de direcciones a las cosas. La prioridad es separada ... por lo general.
Lea otras preguntas en las etiquetas interrupts