Que es el isr y como se aplica

interrumpir los pasos rutinarios del servicio

Este aviso de privacidad proporciona una visión general de nuestro compromiso con la privacidad y describe cómo recopilamos, protegemos, utilizamos y compartimos la información personal recogida a través de este sitio. Tenga en cuenta que otros sitios web y productos y servicios en línea de Pearson tienen sus propias políticas de privacidad.

En el caso de las consultas y preguntas, recogemos la consulta o pregunta, junto con el nombre, los datos de contacto (dirección de correo electrónico, número de teléfono y dirección postal) y cualquier otra información adicional que se nos envíe voluntariamente a través de un formulario de Contacto o un correo electrónico. Utilizamos esta información para atender la consulta y responder a la pregunta.

En el caso de los pedidos y las compras realizadas a través de nuestra tienda en línea en este sitio, recopilamos los detalles del pedido, el nombre, el nombre y la dirección de la institución (si procede), la dirección de correo electrónico, el número de teléfono, las direcciones de envío y facturación, la información de la tarjeta de crédito/débito, las opciones de envío y cualquier instrucción. Utilizamos esta información para completar las transacciones, cumplir con los pedidos, comunicarnos con las personas que hacen pedidos o visitan la tienda en línea, y para fines relacionados.

interrupción isr

Dentro de la función adjunta, delay() no funcionará y el valor devuelto por millis() no se incrementará. Los datos seriales recibidos dentro de la función pueden perderse. Debe declarar como volátil cualquier variable que modifique dentro de la función adjunta. Vea la sección sobre ISRs más abajo para más información.

Las interrupciones son útiles para hacer que las cosas sucedan automáticamente en los programas del microcontrolador y pueden ayudar a resolver problemas de tiempo. Buenas tareas para usar una interrupción pueden incluir la lectura de un codificador rotativo, o el monitoreo de la entrada del usuario.

Si quisieras asegurarte de que un programa siempre capta los pulsos de un codificador rotativo, para que nunca se pierda un pulso, sería muy difícil escribir un programa para hacer cualquier otra cosa, porque el programa necesitaría sondear constantemente las líneas del sensor para el codificador, con el fin de captar los pulsos cuando se produzcan. Otros sensores también tienen una dinámica de interfaz similar, como tratar de leer un sensor de sonido que está tratando de captar un clic, o un sensor de ranura infrarrojo (foto-interruptor) tratando de captar una caída de moneda. En todas estas situaciones, el uso de una interrupción puede liberar al microcontrolador para que pueda realizar algún otro trabajo sin perder la entrada.

tabla de vectores de interrupción

Con toda la automatización disponible hoy en día, es fácil que los programadores pasen por alto los costosos gastos generales introducidos en el código máquina por el compilador. Los gestores de interrupciones son un área clave que merece una inspección más detallada.

En los primeros días de los compiladores de C embebido, las rutinas de servicio de interrupción (ISR) tenían que escribirse en lenguaje ensamblador. Hoy en día, la mayoría de los compiladores permiten al desarrollador identificar una función como ISR, y el compilador se encarga de todos los problemas asociados a la ISR. Esto podría incluir la colocación de la entrada correcta en la tabla de vectores de interrupción, el apilamiento y desapilamiento de los registros, y la terminación de la función con una instrucción de retorno de la interrupción. Incluso hay compiladores que saben cuándo una ISR necesita borrar una bandera particular antes de que la ISR termine e insertará el código apropiado.

Aunque estos avances son muy bienvenidos, tienen un precio: es tan fácil escribir un manejador de interrupciones en un lenguaje de alto nivel que uno puede perder fácilmente la noción de la sobrecarga que el compilador está introduciendo. Hacerlo puede resultar, sin saberlo, en un alto precio por la conveniencia de usar un lenguaje de alto nivel.

tabla de vectores de interrupción

Los controladores para dispositivos físicos que generan interrupciones deben tener al menos una rutina de servicio de interrupción (ISR). La ISR debe hacer lo que sea apropiado para el dispositivo para descartar la interrupción, posiblemente incluyendo la detención de la interrupción del dispositivo. Luego, debe hacer sólo lo necesario para guardar el estado y poner en cola un DPC para terminar la operación de E/S con una prioridad (IRQL) inferior a la que ejecuta el ISR.

Debido a que un ISR se ejecuta en un IRQL relativamente alto, que enmascara las interrupciones con un IRQL equivalente o inferior en el procesador actual, debe devolver el control lo más rápido posible. Además, la ejecución de un ISR en DIRQL restringe el conjunto de rutinas de soporte que el ISR puede llamar. Para más información, consulte Gestión de las prioridades del hardware.

En general, un ISR no realiza ningún procesamiento de E/S para satisfacer un IRP. En su lugar, detiene la interrupción de su dispositivo, establece la información de estado necesaria y pone en cola el DpcForIsr o el CustomDpc del controlador para hacer cualquier procesamiento de E/S que sea necesario para satisfacer la solicitud actual que causó la interrupción del dispositivo.