Por que a função printf não pode ser usada na função de serviço de interrupção

Se você chamar printf para imprimir informações de depuração na função de serviço de interrupção, os seguintes resultados poderão ocorrer:
1. A impressão está incompleta ou não pode ser impressa
2. O programa pode ser executado, mas o comportamento é anormal
3. O programa não pode ser executado

Neste momento, só quero perguntar: por quê? Por que? Por que?
Várias situações precisam ser discutidas. [De acordo com o comportamento da função de interrupção] Para evitar o aninhamento de interrupções, algumas funções de interrupção desabilitarão temporariamente a interrupção [de acordo com o método de implementação de printf], algumas serão implementadas por meio de polling e a prioridade será alcançada por meio da porta serial interrompe.

Se a interrupção estiver desabilitada na função de interrupção
Se o printf chamado depender da impressão de interrupção, isso fará com que o printf falhe na impressão.
Se o printf chamado for implementado por polling, demorará muito para imprimir um caractere, o que reduzirá bastante a interrupção eficiência de processamento, e pode ser possível durante o período de desativação de interrupção. Muitas outras interrupções serão perdidas
Se a função de interrupção não for desabilitada
durante a execução da função printf, a interrupção principal pode ser acionada novamente, chamando printf novamente, causando o reentrada da função printf. No entanto, muitas funções printf não suportam reentrada porque chamam recursos globais, o que causará consequências desastrosas.

Acho que você gosta

Origin blog.csdn.net/Qinlong_Stm32/article/details/124186657
Recomendado
Clasificación