Soy nuevo en la programación incrustada en C, solo entiendo la codificación. ¿Hay una diferencia fundamental entre una función de interrupción y una función de retardo?
Apreciaría enormemente las respuestas con el código de ejemplo.
Soy nuevo en la programación incrustada en C, solo entiendo la codificación. ¿Hay una diferencia fundamental entre una función de interrupción y una función de retardo?
Apreciaría enormemente las respuestas con el código de ejemplo.
Esas son dos cosas conceptualmente diferentes.
"Función de interrupción"
Esto es más comúnmente llamado un controlador de interrupción o rutina de servicio de interrupción (ISR). La ejecución se desencadena por la recepción de una interrupción de hardware. Las acciones que se toman en el ISR normalmente dependen de la razón por la cual se generó la interrupción (el tipo de fuente de interrupción que la causó).
"función de retardo"
Normalmente, esta es una función que acepta 1 parámetro que especifica el retraso para el que se debe bloquear la ejecución del código.
Quizás esté confundido aquí, porque un retraso también puede implementarse utilizando un enfoque de interrupción. Puede implementar un retraso utilizando una interrupción (temporizador). A menudo se prefiere esto para llamar a una función de retardo como
delay(1000); /// delay for 1000ms
porque esto bloquearía el bucle principal durante 1 segundo.
Usando un enfoque basado en interrupciones, puede establecer algún tipo de indicador en la rutina de servicio de interrupciones (que se dispara después de un retraso específico usando un contador / temporizador de hardware). Ese indicador solo se puede verificar en el bucle principal para determinar si el retraso expiró, efectivamente no bloqueando la ejecución de otro código.
Durante un "retraso", los programas se sientan y esperan en un punto particular de un programa, y no hacen nada más. Una interrupción, sin embargo, puede ocurrir en cualquier momento. Aleja el puntero del programa de la línea de ejecución en la que se encontraba, procesa un poco en una rutina de interrupción y luego restaura el puntero del programa donde estaba antes de la interrupción.
Puede lograr un retraso efectivo utilizando un tipo de interrupción que se activa mediante un temporizador (es decir, una interrupción del temporizador). Usted carga el temporizador a algún valor, lo inicia y desencadena una interrupción cuando el registro del temporizador gira.
Una interrupción se genera en respuesta a un evento determinado. Por ejemplo, si genera una interrupción en un interruptor, esa parte del código solo se llamará cuando se presione ese interruptor. En caso de una función de demora, comprueba constantemente cada pocos microsegundos si se ha pulsado la tecla.
Piense en esto como correo en su teléfono frente a Webmail. En el primer caso, cada vez que recibe un correo electrónico, recibe una notificación en su teléfono inteligente que le informa que tiene un correo electrónico. En el caso de correo web, verifica cada pocos minutos (u horas) si tiene un correo.
Lea otras preguntas en las etiquetas interrupts programming delay