Ich arbeite mit dem Tiva Launchpad EK-TM4C123GXL und dem ESP8266 WIFI Modul.Wie wird eine Funktion entworfen, die angibt, wann "+ IPD" vom UART ankommt?
Wenn dieses Modul ein WLAN-Paket erhält, sendet es es über den UART-Port an den Mikrocontroller.
Die durch Esp8266 verwendete Format eines Pakets (zum uC via UART) zu senden ist:
+IPD,n:xxxxx\r\nOK\r\n
wobei:
n
die Länge (in Bytes) der Daten Paket:
zeigt an, dass das nächste Byte das erste Datenbyte- sein wirdist das Datenpaket
\r\nOK\r\n
sind 6 Bytes und sie sind nutzlos für mich.
Zum Beispiel:
+IPD,5:hello\r\nOK\r\n
Hier ist meine Situation:
ich auf einem bestehenden Projekt gerade arbeite, wo ich diese beiden Dinge nicht ändern:
1- Das UART-Modul ist bereits so konfiguriert, dass es einen Interrupt generiert, wenn sein Empfangs-FIFO (16 Byte) halb voll ist.
2- Die ISR (Interrupt Service Routine), die diesen Interrupt behandelt:
liest nur ein Byte aus dem UARTDR (UART-Datenregister)
speichert sie in eine Variable
ruft eine Funktion auf (genannt rx_data()), die dieses Byte behandelt.
Jetzt habe ich diese Funktion schreiben, die so genannte RX_DATA(), in C-Sprache.
So wird die Meldung Form der Esp8266 Modul kommt an diese Funktion übergeben wird, RX_DATA(), ein Byte zu einem Zeitpunkt, und diese Funktion muss in der Lage sein den Header
identifizieren
+IPD,
lesen die Länge
n
des DatenpaketsSpeichern des Datenpakets
xxxxx
(das ist lokalisieren d nach dem:
Charakter und vor den ersten\r
Zeichen) in einen Pufferdas letzte Byte verwerfen
\r\nOK\r\n
(diese 6 Bytes sind nutzlos für mich, aber, wie auch immer, ich sie sie aus dem Empfangs-FIFO zu entfernen lesen muß)
denke ich Schritt arbeitet für Schritt, so dass ich jetzt bin Argumentation auf:
wie die +IPD,
zu identifizieren, wenn man bedenkt, dass nur ein Byte zu einem Zeitpunkt wird an diese Funktion übergeben?
Speichern Sie den Status an einem Ort, der beim Verlassen der Funktion nicht gelöscht wird. – MikeCAT
Sie könnten einen globalen RX-Puffer zum Speichern der Bytes erstellen, und jedes Mal, wenn 'rx_data' aufgerufen wird, wird das Byte zum Puffer hinzugefügt und der Index (auch eine globale Variable) wird inkrementiert. Führen Sie dies aus, bis Sie eine vollständige Nachricht erhalten haben oder bis Sie die gewünschten Daten sehen/haben und löschen Sie den Puffer und setzen Sie den Index zurück, um erneut zu starten. – DigitalNinja