Fragen, die bei der Entwicklung und dem Schreiben von Interrupt-Programmen für Single-Chip-Mikrocomputer in Chengdu berücksichtigt werden müssen

2020-08-20 19:31:27 admin

Fragen, die bei der Entwicklung und dem Schreiben von Interrupt-Programmen für Single-Chip-Mikrocomputer in Chengdu berücksichtigt werden müssen


Der Mikrocontroller enthält viele Interrupt-Ressourcen, z. B. externe Interrupts, Timer-Interrupts, Interrupts an der seriellen Schnittstelle usw. Diese Interrupt-Ressourcen sollten zur Behandlung entsprechender Notfallereignisse verwendet werden und nicht zu Routineereignissen, die nacheinander ausgeführt werden. Achten Sie daher beim Schreiben von Interrupt-Subroutinen darauf .


Bestimmte Transaktionsverarbeitungsanweisungen sollten nicht in die Interrupt-Funktion eingefügt werden, die Anweisungen in der Interrupt-Subroutine sollten präzise und klar sein und es sollten nicht zu viele Anweisungen vorhanden sein. Wenn Sie beim Schreiben einer Interrupt-Subroutine eine große Reihe von Anweisungen schreiben, um bestimmte Transaktionen wie in der Hauptfunktion zu behandeln, dauert es in diesem Interrupt zu lange, wenn andere Interrupt-Signale mit niedriger Priorität eingehen. Dies kann dazu führen, dass der Interrupt verloren geht und der Logikfehler des Programms auftritt. Daher sollte die Anweisungsanweisung in der Interrupt-Unterroutine die kürzeste sein.


Die Anweisungen in der Interrupt-Subroutine sollten nicht die Verzögerungsfunktion verwenden und nicht die Anweisungen mit der Warteverzögerungsfunktion wie while, do-while, do-till. Die Verwendung von while-, do-while-, do-till- und anderen Anweisungen in der Interrupt-Subroutine führt auch dazu, dass der Mikrocontroller an dieser Position während des Ausführungsprozesses verzögert oder zu lange wartet, und es kann auch dazu führen, dass der Interrupt verloren geht, wenn andere Interrupt-Signale kommen. .


Was ist also zu tun?


Wenn Sie die Interrupt-Subroutine schreiben, sollten Sie die globale Statusvariable geschickt verwenden. In der Interrupt-Subroutine wird nur der Wert der Statusvariablen geändert. In der Hauptfunktion wird der Wert der Statusvariablen innerhalb des while (1) -Programmsegments beurteilt und dann basierend auf dem Wert der Statusvariablen. Führen Sie die entsprechenden Transaktionsverarbeitungsanweisungen aus. Es ist, als würden Sie einen Anruf erhalten, in dem Sie aufgefordert werden, etwas zu tun, und Sie können nicht weiter anrufen, um es zu beenden. Sie müssen die Angelegenheit aufschreiben, den Hörer auflegen und einen Termin für die Bearbeitung vereinbaren.


Beispielsweise muss ein Touchscreen mit serieller Schnittstelle entsprechende Vorgänge gemäß den Tasten auf dem Touchscreen ausführen und den Interrupt mit serieller Schnittstelle verwenden. Angenommen, der Touchscreen sendet Daten A, wenn Taste 1 berührt wird, und Daten B, wenn Taste 2 berührt wird, können wir einen globalen Statusvariablenbefehl definieren:


vorzeichenloser char-Befehl;


Ändern Sie in der Unterroutine für die Unterbrechung der seriellen Schnittstelle den Wert des Befehls entsprechend den empfangenen unterschiedlichen Daten der seriellen Schnittstelle:


Unterbrechungsfunktion der seriellen Schnittstelle 1 ungültig machen ()


{


Switch (empfangene serielle Portdaten)


{case A: // Wenn die Aktion von Taste 1 empfangen wird, wird der Befehl x1 zugewiesen


{Befehl = x1;


brechen;


}}


Fall B: // Wenn die Aktion von Taste 2 empfangen wird, wird der Befehl x2 zugewiesen


{Befehl = x2;


brechen;


}}



Standard: break;


}}


}}


In der obigen Interrupt-Subroutine der seriellen Schnittstelle 1 ist der Schalter eine bedingte Auswahlanweisung. Wenn die serielle Schnittstelle Daten A empfängt, wird dem Befehl x1 zugewiesen, und wenn die serielle Schnittstelle Daten B empfängt, wird dem Befehl x2 zugewiesen. Natürlich ist das obige Programmsegment nur ein erklärendes Zeichen und kann nicht direkt kopiert und kompiliert werden, um auf dem Einzelchip-Mikrocomputer ausgeführt zu werden. Im eigentlichen Projekt muss es gemäß den Schreibregeln verschiedener Einzelchip-Mikrocomputerprogramme entwickelt werden.


Führen Sie dann verschiedene Transaktionsverarbeitungsanweisungen entsprechend dem Befehlswert in der Hauptfunktion aus:


Hauptfunktion()


{



während (1)


{


Schalter (Befehl)


{casex1: // Wenn Sie die Aktion von Schaltfläche 1 erhalten, führen Sie das Programm von Transaktion 1 aus


{Transaktionsverarbeitung 1;


brechen;


}}


casex2: // Wenn die Aktion von Taste 2 empfangen wird, führen Sie das Programm von Transaktion 2 aus


{Transaktion 2;


brechen;


}}


       Standard: break;


}}


}}


}}


Gemäß einem solchen Programm ändert der Einzelchip-Mikrocomputer, wenn er die Daten der seriellen Schnittstelle, die verschiedene Schlüssel darstellen, vom Touchscreen empfängt, den Wert des Befehls für die globale Statusvariable in der Unterroutine für die Unterbrechung der seriellen Schnittstelle. Diese Anweisung ist wenige und die Ausführungszeit ist kurz. In der Hauptfunktion wird das zeitaufwändige spezifische Transaktionsverarbeitungsprogramm gemäß den verschiedenen Befehlswerten ausgeführt. Durch diese Art der Programmverteilung wird die MCU effizient und vernünftig ausgeführt.


标签: MCU-Entwicklung