Las interrupciones de software se pueden usar para terminar una tarea de interrupción con una prioridad más baja. El código crítico de tiempo a menudo recibe una alta prioridad de interrupción para evitar demasiada latencia. Una vez que finaliza la parte crítica de tiempo, puede haber tareas adicionales que pueden ser demasiado críticas de tiempo para el bucle principal, pero no son tan críticas como para retener otras interrupciones de alta prioridad. La activación de una interrupción de software de menor prioridad puede lograr esto.
Por ejemplo, suponga que tiene varios motores paso a paso, cada uno con su propio temporizador. Las interrupciones del temporizador tienen una prioridad alta para minimizar el jitter de pasos. La tarea más crítica en cuanto a la sincronización puede ser tan simple como configurar o eliminar un pulso escalonado o hacer avanzar las salidas de fase. Es posible que se requiera funcionalidad adicional, como el cálculo de rampas de aceleración, el procesamiento del sensor, etc. Dado que esto debe procesarse en cada paso, puede que no sea apropiado procesarlo desde main () ya que la temporización del bucle principal puede ser demasiado larga. Estas tareas adicionales se pueden procesar mediante una interrupción de software de menor prioridad para no aumentar la latencia de los otros canales de pasos de alta prioridad.
¿Cuál es la diferencia entre una interrupción de software y una función?
Se llama a una función inmediatamente desde cualquier lugar donde se llama y no cambia el nivel de prioridad de interrupción actual si se llama desde una interrupción. Una interrupción de software es un desencadenante de interrupción que hará que se llame a esa interrupción cuando se presente la prioridad. Si se inserta una llamada a la función al final de una interrupción de alta prioridad, la función estaría contenida dentro de esa alta prioridad. Al activar la interrupción de software de menor prioridad y luego regresar desde la interrupción de alta prioridad, la funcionalidad se invoca con la nueva prioridad (más baja).