Pergunta

Eu tenho um módulo de tratamento de interrupções que controla o hardware controlador de interrupção em um processador embutido. Agora eu quero adicionar mais testes para ele. Atualmente, os testes só testa se nidificação de interrupções trabalha fazendo duas interrupções de software a partir de uma ISR, um com baixa prioridade e um com alta prioridade. Como posso testar este módulo mais?

Foi útil?

Solução

Eu sugiro que você tentar criar outros estímulos também.

Muitas vezes, também interrupções de hardware podem ser acionados por software (teste automático) ou o depurador, definindo uma bandeira. Ou como uma interrupção via I / O. Ou uma interrupção timer. Ou você pode apenas definir o bit de interrupção em um controlador de interrupção através do depurador, enquanto você é único piso.

Você pode adicionar algumas verificações de tempo de execução em coisas que não deveriam acontecer. Às vezes eu optar por conjunto de pinos de saída para monitorar externamente (bom se você tem um analisador osciloscópio ou lógica ...)

low_prio_isr(void)
{
    LOW_PRIO_ISR=1;
    if (1 == HIGH_PRIO_ISR)
    { this may never happen. dummy statement to allow breakpoint in debugger }

}

high_prio_isr(void)
{
    HIGH_PRIO_ISR=1
} 

A desvantagem do software interrupção é que o momento é fixo; sempre a mesma instrução. Eu acredito que você gostaria de ver provas de que ele sempre funciona; impasse livre.

Para rotinas de serviço de interrupção I encontrar revisões de código muito valioso. No final, você só pode testar as situações que você imaginou e em algum momento o esforço de teste será muito elevado. ISRs são notoriamente difíceis de depurar.

Eu acho que é útil para fornecer testes para o seguinte: - ISR não for interrompida por menor interrupção prioridade - ISR não é interrompido para mesma interrupção prioridade - ISR for interrompida por maior interrupção prioridade -. Contagem de aninhamento máximo dentro das limitações de pilha

Alguns de seus testes podem ficar no código como instrumentação (para que você possa monitorar a nível de instância máxima de nidificação.

Oh, e mais uma coisa:. Eu geralmente conseguido manter ISRs tão curta que eu posso abster-se de nidificação .... se você pode presente que você irá ganhar simplicidade adicional e mais desempenho

[EDIT] Claro, ISRs precisa ser testado em hardware no sistema também. Além do bit-por-bit, passo-a-passo abordagem, você pode querer provar: - estabilidade do sistema em carga máxima de interrupção (de preferência várias vezes a carga máxima prevista, se o seu 115kbps driver serial também pode lidar com 2Mbps você vai ser ok!) - momento correto de ativação / desativação ISR, especialmente se o sistema também entra em um modo de suspensão - # de interrupções. Pode ser surpreendente se você adicionar interruptores mecânicos, mecânicos rotativos (centenas de momentos pausa / de contato antes de chegar situação estável)

Outras dicas

Eu recomendo testes de hardware real. manipulação de interrupção é inerentemente aleatória e imprevisível.

Uso de um gerador de sinal e alimenta uma onda quadrada para o pino de interrupção apropriado. Usar vários geradores (ou um com várias saídas) para testar múltiplas linhas IRQ e verificar a manipulação de prioridade.

Experiência com a marcação a frequência para cima e para baixo sobre os geradores de sinais (variar as taxas entre eles), e ver o que acontece. Tem um monte de código de diagnóstico para verificar o estado do controlador de interrupção em vários estados.

Alternativa:. Se a sua plataforma tem temporizadores que podem provocar interrupções, você pode usá-los em vez de hardware externo

Eu não sou um desenvolvedor embutido, então eu não sei se isso é possível, mas como sobre a dissociação o código que lida com as interrupções do mecanismo de callback-registo? Isso permitiria que você código simulador de gravação fireing interrupção-eventos como você gosta dele ...

Para coisas como esta eu recomendo algo como o modelo SPIN verificador . Você acaba de testar o algoritmo, e não o código, mas o teste é exaustiva . De volta ao dia, I encontrou um bug no gdb usando esta técnica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top