Interrupções de software podem ser usadas para finalizar uma tarefa de interrupção com uma prioridade mais baixa. O código crítico de temporização geralmente recebe uma alta prioridade de interrupção para evitar muita latência. Após a conclusão da parte crítica de temporização, pode haver tarefas adicionais que podem ser críticas demais para o loop principal, mas não são tão críticas a ponto de impedir outras interrupções de alta prioridade. Disparar uma interrupção de prioridade mais baixa do software pode fazer isso.
Por exemplo, suponha que você tenha vários motores de passo, cada um com seu próprio timer. As interrupções do temporizador recebem alta prioridade para minimizar a tremulação da etapa. A tarefa mais crítica de tempo pode ser tão simples quanto definir ou limpar um pulso de passo ou avançar as saídas de fase. Pode haver funcionalidade adicional necessária, como cálculo de rampas de aceleração, processamento de sensores, etc. Como isso precisa ser processado a cada etapa, pode não ser apropriado processá-lo a partir de main (), pois o tempo do loop principal pode ser muito longo. Essas tarefas adicionais podem ser processadas por uma interrupção de software de baixa prioridade, para não aumentar a latência dos outros canais de passo de alta prioridade.
Qual é a diferença entre uma interrupção de software e uma função?
Uma função é chamada imediatamente de onde quer que seja chamada e não altera o nível atual de prioridade de interrupção se for chamada de uma interrupção. Uma interrupção de software é um gatilho de interrupção que fará com que essa interrupção seja chamada quando a prioridade surgir. Se uma chamada de função fosse inserida no final de uma interrupção de alta prioridade, a função estaria contida nessa alta prioridade. Ao disparar a interrupção de prioridade mais baixa do software e depois retornar da interrupção de alta prioridade, a funcionalidade é chamada na nova prioridade (mais baixa).