Frage

Ich habe ein Interrupt-Handhabungsmodul bekommt, die die Interrupt-Controller-Hardware auf einem Embedded-Prozessor steuert. Jetzt möchte ich mehr Tests, um es hinzuzufügen. Derzeit arbeitet die Tests nur prüft, ob Verschachtelung von Interrupts durch zwei Software machen Interrupts innerhalb einer ISR, ein mit niedriger Priorität und einem mit hohen Priorität. Wie kann ich dieses Modul weiter testen?

War es hilfreich?

Lösung

Ich schlage vor, dass Sie versuchen auch andere Reize zu schaffen.

Oft auch Hardware-Interrupts können durch Software (automatische Prüfung) oder dem Debugger durch Setzen eines Flags ausgelöst werden. Oder als ein Interrupt über I / O. Oder ein Timer-Interrupt. Oder Sie können das Interrupt-Bit in einem Interrupt-Controller über den Debugger nur gesetzt, während Sie Single-Stepping sind.

Sie können einige Laufzeitprüfungen auf Dinge hinzufügen, die nicht sollen geschehen. Manchmal wähle I Ausgangs-Pins setzen extern zu überwachen (schön, wenn man ein Oszilloskop oder Logik-Analysator hat ...)

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
} 

Der Nachteil des Software-Interrupt ist, dass in dem Moment festgelegt ist; immer die gleiche Anweisung. Ich glaube, Sie möchten, dass Beweise, um zu sehen, dass es immer funktioniert; Deadlock frei.

Für Interrupt-Service-Routinen finde ich Code-Reviews sehr wertvoll. Am Ende können Sie nur die Situationen testen Sie und an einem gewissen Punkt der Aufwand der Prüfung vorgestellt haben wird sehr hoch sein. ISRs sind notorisch schwierig zu debuggen.

Ich denke, es ist nützlich, Tests für die folgenden zur Verfügung zu stellen:  - isr nicht für niedrigere Priorität Interrupt unterbrochen  - isr ist nicht für die gleiche Priorität Interrupt unterbrochen  - isr für Interrupt höherer Priorität unterbrochen  -. Maximale Verschachtelung Zahl innerhalb Stapel Einschränkungen

Einige der Tests im Code als Instrumentierung bleiben können (so können Sie zum Beispiel maximalen Verschachtelungstiefe überwachen.

Oh, und noch eine Sache. Ich habe es geschafft, im Allgemeinen ISRs zu halten, so kurz, dass ich von Verschachtelung verzichten kann .... wenn du das Sie gewinnen können zusätzliche Einfachheit und mehr Leistung

[EDIT] Natürlich müssen ISRs auch auf Hardware-in-System getestet werden. Neben der Bit-für-Bit, Schritt-für-Schritt-Ansatz, den Sie beweisen möchten:  - Stabilität des Systems bei maximaler Interrupt-Last (vorzugsweise mehrmals die vorhergesagte maximale Last, wenn Ihre 115kbps serielle Treiber können auch 2MBps behandeln Sie werden in Ordnung sein!)  - korrekter Moment der Aktivierung / Deaktivierung isr, vor allem, wenn auch System tritt in einen Schlafmodus  - Anzahl der Interrupts. mechanische Dreh kann überraschend sein, wenn Sie mechanische Schalter hinzufügen, (Hunderte von Pause / Kontaktmomenten vor stetige Situation zu erreichen)

Andere Tipps

Ich empfehle Echt Hardware-Tests. Interrupt-Behandlung ist von Natur aus zufällig und unvorhersehbar.

einen Signalgenerator verwenden und eine Rechteckwelle in das entsprechende Interrupt-Stachelrad. Verwenden Sie mehrere Generatoren (oder einen mit mehreren Ausgängen) mehr IRQ-Leitungen zu testen und prioritäre Behandlung überprüfen.

Experiment mit der Frequenz nach oben und unten auf den Signalgeneratoren einwählen (variieren die Preise zwischen ihnen), und sehen, was passiert. Viel Diagnosecode den Zustand der Interrupt-Controller in den einzelnen Staaten zu überprüfen.

Alternative:. Wenn Ihre Plattform hat Timer, die Alarme auslösen können, können Sie sie anstelle von externer Hardware verwenden

Ich bin kein Embedded Entwickler, so dass ich weiß nicht, ob dies möglich ist, aber wie wäre es, den Code Entkopplung, die die Interrupts von der Callback-Registrierungsmechanismus behandelt? Dies würde es ermöglichen Ihnen Simulator Code fireing Interrupt-Ereignisse zu schreiben, wie es Ihnen gefällt ...

Für Sachen wie diese empfehle ich so etwas wie der SPIN Modellprüfer . Sie aufzuwickeln den Algorithmus zu testen, nicht der Code, aber der Test ist erschöpfende . Zurück in den Tag, fand ich einen Fehler in gdb mit dieser Technik.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top