Pregunta

Tengo un módulo de gestión de interrupciones que controla el hardware del controlador de interrupción en un procesador embebido. Ahora quiero agregar más pruebas a la misma. Actualmente, las pruebas sólo si las pruebas de anidamiento de interrupciones obras de toma de software dos interrupciones desde el interior de un ISR, uno con prioridad baja y otro con alta prioridad. ¿Cómo puedo probar este módulo más?

¿Fue útil?

Solución

Sugiero que intenta crear otros estímulos también.

A menudo, también las interrupciones de hardware pueden ser provocados por el software (prueba automática) o el depurador mediante el establecimiento de una bandera. O como una interrupción a través de I / O. O una interrupción del temporizador. O simplemente puede configurar el bit de interrupción en un controlador de interrupciones a través del depurador mientras está paso a paso.

Se pueden añadir algunas comprobaciones en tiempo de ejecución en las que no se supone que debe ocurrir. A veces me elegir configurar los pines de salida para controlar externamente (bueno si usted tiene un analizador osciloscopio o 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
} 

La desventaja de la interrupción de software es que el momento es fijo; siempre la misma instrucción. Creo que le gustaría ver pruebas de que siempre funciona; callejón sin salida libre.

Para las rutinas de servicio de interrupción encuentro revisiones de código muy valiosa. Al final sólo se puede probar las situaciones que has imaginado y en algún momento el esfuerzo de la prueba será muy alta. ISR son notoriamente difíciles de depurar.

Creo que es útil para proporcionar pruebas para lo siguiente:  - ISR no se interrumpe por menor interrupción de prioridad  - ISR no se interrumpe por el mismo interrupción de prioridad  - isr se interrumpe para una mayor interrupción de prioridad  -. Recuento máximo de anidamiento dentro de las limitaciones de la pila

Algunas de las pruebas pueden permanecer en el código como la instrumentación (para que pueda controlar, por ejemplo, el nivel máximo de anidamiento.

Ah, y una cosa más:. He general logrado mantener ISR tan corto que puedo abstenerse de anidación .... si puede esta usted ganará simplicidad adicional y más rendimiento

[EDIT] Por supuesto, los ISR necesitan ser probados en el hardware en el sistema también. Aparte del poco bit por, paso a paso enfoque es posible que desee probar:  - estabilidad del sistema con carga máxima de interrupción (preferiblemente varias veces la carga máxima prevista; si sus 115kbps controlador serie también puede manejar 2MBps todo irá bien!)  - momento correcto de activación / desactivación de ISR, especialmente si el sistema también entra en un modo de espera  - # de interrupciones. Puede ser sorprendente si se agrega interruptores mecánicos rotativos, mecánica (cientos de momentos ruptura / contacto antes de llegar a la situación de equilibrio)

Otros consejos

Recomiendo prueba en hardware real. manejo de interrupciones es inherentemente aleatorio e impredecible.

Utilice un generador de señal y alimentar a una onda cuadrada en el pin de interrupción adecuado. El uso de múltiples generadores (o uno con múltiples salidas) para probar múltiples líneas IRQ y verificar tratamiento prioritario.

Experimento con marcar la frecuencia arriba y abajo en los generadores de señales (las tarifas varían entre ellos), y ver qué pasa. Tenga porciones de código de diagnóstico para verificar el estado del controlador de interrupciones en los diversos estados.

Alternativa:. Si su plataforma cuenta con temporizadores que pueden desencadenar interrupciones, se puede usar en lugar de hardware externo

No soy un desarrollador incrustado, así que no sé si esto es posible, pero ¿qué hay de desacoplar el código que maneja las interrupciones desde el mecanismo de registro de devolución de llamada? Esto le permitiría a escribir código simulador fireing de interrupción-eventos a su gusto ...

Por cosas como esta me recomiendan altamente algo así como el SPIN comprobador de modelos . Como resultado, terminamos probar el algoritmo, no el código, pero la prueba es exhaustiva . De vuelta en el día, He encontrado un fallo en gdb utilizando esta técnica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top