Las interrupciones de software se pueden utilizar para finalizar una tarea de interrupción con una prioridad inferior. El código crítico de temporización a menudo recibe una alta prioridad de interrupción para evitar demasiada latencia. Una vez que finaliza la parte crítica de temporización, puede haber tareas adicionales que pueden ser demasiado críticas para el bucle principal, pero que no son tan críticas como para detener otras interrupciones de alta prioridad. Activar 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 alta prioridad para minimizar la fluctuación de fase. La tarea más crítica de tiempo puede ser tan simple como configurar o borrar un pulso de paso o avanzar las salidas de fase. Es posible que se requiera una funcionalidad adicional, como el cálculo de las rampas de aceleración, el procesamiento del sensor, etc. Dado que esto debe procesarse en cada paso, puede que no sea apropiado procesar esto desde main () ya que la sincronización del bucle principal puede ser demasiado larga. Estas tareas adicionales pueden procesarse mediante una interrupción de software de menor prioridad para no aumentar la latencia de los otros canales paso a paso de alta prioridad.
¿Cuál es la diferencia entre una interrupción de software y una función?
Una función se llama inmediatamente desde donde se llame 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 disparador de interrupción que hará que se llame a esa interrupción cuando surja la prioridad. Si se insertara una llamada de 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 de la interrupción de alta prioridad, se llama a la funcionalidad a la nueva prioridad (menor).