¿Cuál es el peligro de usar la prevención de interrupciones en ARM?

1

Estoy trabajando en un sistema que usa aproximadamente 4 interrupciones. Puedo definir claramente una prioridad de uno a otro. Por ejemplo, alimento transferencias SPI con solicitudes DMA y opero una interfaz USB que controla los datos SPI. Con este fin, he priorizado mis interrupciones de la siguiente manera (ordenadas de prioridad más alta a más baja)

  1. Systick
  2. EXTI para señales de handshaking
  3. transmisiones DMA
  4. USB

Todo funciona bien por un tiempo y luego empiezo a ver algunos comportamientos extraños que aún no he podido determinar la causa, pero me pregunto / sospecho si es porque estoy permitiendo que las interrupciones se anticipen a otras. Tiempos inoportunos.

Entonces, mi pregunta es, qué tipo de problemas se deben considerar al decidir si una interrupción debe adelantarse a otra, o si solo se le debe dar una prioridad suficientemente alta a la cadena de la cola.

    
pregunta Jared

1 respuesta

4

En general, la prevención de interrupciones puede causar problemas de interbloqueo: si una interrupción espera en un recurso que está bloqueado / en uso por otra interrupción de prioridad más baja, su programa puede detenerse.

Además, una interrupción de mayor prioridad puede interrumpir una tarea que no debe interrumpirse si no se protege adecuadamente (secciones críticas). Cuando no se utiliza la prevención de interrupciones, la desactivación de interrupciones en un nivel dado desactiva todas las interrupciones. Al anidar, es posible que las interrupciones de mayor prioridad rompan el código de las interrupciones / código de menor prioridad de manera inesperada.

Francamente, a menos que realmente necesite priorizar un proceso sobre otro, es inútil meterse con eso. Como parece que solo están encadenando procesos interdependientes, solo lo llamaría pidiendo problemas.

    
respondido por el Mishyoshi

Lea otras preguntas en las etiquetas