Función de interrupción vs software

9

Después de aproximadamente 3 años de trabajar con MCU, aún no sé de qué se utilizan las interrupciones de software. He realizado varios trabajos con STM32 y nunca he usado el software interrumpe De hecho, esta es una gran pregunta para mí:

¿Por qué cuando podemos usar una función simple para realizar una tarea, deberíamos usar una interrupción de software? ¿Cuáles son las diferencias entre una interrupción de software y una función?

Cada vez que lo desee, puede llamar a una función (que ha escrito para su trabajo). Debería haber algunos beneficios al usar una interrupción de software en lugar de una simple función. No estoy seguro, pero creo que hay un beneficio para las interrupciones de software: puede asignar una prioridad a una interrupción de software, luego puede darle mayor prioridad a la interrupción de software para evitar que la interrupción de hardware interrumpa su tarea.

    
pregunta Roh

3 respuestas

18

La principal diferencia entre una función y una interrupción de software es lo que se conoce como contexto .

  • Una función se ejecuta dentro del contexto de su programa principal.
  • Se ejecuta una interrupción dentro del contexto del controlador de interrupción.

En un sistema simple, esto puede no ser una diferencia real, y las interrupciones de software pueden usarse simplemente como una forma conveniente de proporcionar rutinas de biblioteca codificadas en ROM, no es necesario saber la dirección de cada rutina, solo la ID Código y el punto de entrada principal. Esto hace que tu código sea más portátil.

Sin embargo, en sistemas más complejos, la interrupción del software puede ejecutarse en un entorno completamente diferente, conocido como kernel context . Normalmente, su aplicación se ejecutaría en un contexto de usuario protegido que tiene acceso limitado a los recursos. Solo cuando se ejecuta en el contexto del kernel puede realizar las tareas más complicadas, de hecho, algunos sistemas incluso limitan las instrucciones que se pueden ejecutar, por lo que necesita un mecanismo para activar el código en el contexto del kernel, y para eso se utiliza una interrupción.

    
respondido por el Majenko
11

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).

    
respondido por el Tut
7

Para ampliar un poco la respuesta de Majenko, las interrupciones de software se utilizan para implementar sistemas operativos, particularmente la interfaz de llamadas al sistema. Esto significa que las aplicaciones no necesitan estar vinculadas con el sistema operativo para realizar llamadas de función, y el cambio de contexto permite que el sistema operativo limite el acceso al hardware y aproveche cosas como la memoria protegida.

Si no está utilizando un sistema operativo y controla todo el código en la MCU, probablemente no necesite usar interrupciones de software. (Aunque como mencionó Tut, pueden tener otros usos).

El Linux y MS-DOS las interfaces de llamadas al sistema en x86 utilizan interrupciones de software, por lo que las enlazaré como ejemplo.

    
respondido por el Adam Haun

Lea otras preguntas en las etiquetas