Question

J'ai un module de gestion d'interruption qui contrôle le matériel de contrôleur d'interruption sur un processeur embarqué. Maintenant, je veux ajouter d'autres tests à elle. À l'heure actuelle, les tests ne teste si l'imbrication des interruptions fonctionne en faisant deux logiciels interruptions à partir d'un ISR, un à faible priorité et une priorité élevée. Comment puis-je tester ce module plus loin?

Était-ce utile?

La solution

Je suggère que vous essayez de créer d'autres stimuli ainsi.

Souvent, aussi les interruptions matérielles peuvent être déclenchées par logiciel (test automatique) ou le débogueur en définissant un drapeau. Ou comme une interruption via E / S. Ou une interruption de minuterie. Ou vous pouvez simplement définir le bit d'interruption dans un contrôleur d'interruption via le débogueur pendant que vous êtes seul à pas.

Vous pouvez ajouter des contrôles d'exécution sur les choses qui ne sont pas censées se produire. Parfois, je choisis de mettre des broches de sortie pour surveiller l'extérieur (bien si vous avez un oscilloscope ou analyseur de logique ...)

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
} 

L'inconvénient de l'interruption de logiciel est que le moment est fixe; toujours la même instruction. Je crois que vous voulez voir la preuve que cela fonctionne toujours; impasse libre.

Pour les routines de service d'interruption, je trouve des revues de code très précieux. En fin de compte, vous ne pouvez tester les situations que vous avez imaginé et à un moment donné l'effort de test sera très élevé. TGB sont notoirement difficiles à déboguer.

Je pense qu'il est utile de fournir des tests pour les éléments suivants:  - isr ne soit pas interrompue pour interruption de priorité inférieure  - isr ne soit pas interrompue même interruption de priorité  - isr est interrompue pour interruption de priorité plus élevée  -. Le nombre maximum d'imbrication dans les limites de la pile

Certains de vos tests peuvent rester dans le code que l'instrumentation (afin que vous puissiez suivre par exemple le niveau d'imbrication maximale.

Oh, et encore une chose. J'ai généralement réussi à garder ISRs si court que je peux me empêcher de faire un nid .... Si vous pouvez vous gagner plus de simplicité et de performances supplémentaires

[EDIT] Bien sûr, ISRs doivent être testés sur le matériel trop dans le système. En dehors de l'approche bit par bit, étape par étape, vous pouvez prouver:  - la stabilité du système à la charge d'interruption maximale (de préférence plusieurs fois la charge maximale prévue, si votre 115kbps pilote série peut également gérer 2Mo vous serez ok!)  - bon moment de l'activation / désactivation isr, en particulier si le système entre également un mode de veille  - Nombre d'interruptions. Peut-être surprenant si vous ajoutez des interrupteurs mécaniques, rotatifs mécaniques (des centaines de moments pause / contact avant d'atteindre la situation stable)

Autres conseils

Je recommande le test-matériel réel. la gestion des interruptions est par nature aléatoire et imprévisible.

utiliser un générateur de signal et alimenter une onde carrée à la broche d'interruption approprié. Utiliser plusieurs générateurs (ou une avec des sorties multiples) pour tester plusieurs lignes IRQ et vérifier un traitement prioritaire.

Expérience avec la numérotation de la fréquence de haut en bas sur les générateurs de signaux (faire varier les taux entre eux), et de voir ce qui se passe. Avoir beaucoup de code de diagnostic pour vérifier l'état du contrôleur d'interruption dans les différents états.

Alternative:. Si votre plate-forme a des minuteries qui peuvent déclencher des interruptions, vous pouvez les utiliser au lieu de matériel externe

Je ne suis pas un développeur intégré, donc je ne sais pas si cela est possible, mais que diriez-vous de découplage du code qui gère les interruptions du mécanisme d'enregistrement de rappel? Cela vous permet d'écrire du code de simulateur fireing interruption des événements que vous le souhaitez ...

Pour des choses comme cela, je recommande fortement quelque chose comme le modèle SPIN vérificateur . Vous liquidez tester l'algorithme, pas le code, mais le test est exhaustive . Retour dans la journée, J'ai trouvé un bogue dans gdb en utilisant cette technique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top