Gast
#2274511
Hallo zusammen, mir geht es gerade nicht um ein konkretes Problem, sondern ich bin gerade am Überlegen, wie ich einen Programmteil am effektivsten aufbaue. Implementiert werden soll eine UART Kommunikation mittels AT-Befehlen mit einem Handy. Hierzu wird immer ein Kommando vom uC gesendet und das Handy antwortet hierauf. Je nach Antwort soll dann ggf. wieder ein weiterer Befehl gesendet werden usw. Um nicht das ganze Programm zu blockieren, kann ich natürlich nicht einfach warten, bis das Handy antwortet. Im Moment plane ich, das ganze wie folgt zu lösen: - Eine Funktion wird von der Mainschleife ständig aufgerufen. In dieser wird die Variable "Zustand" abgefragt. Diese hat zunächst den Wert 0. Beim Wert 0 wird der erste Befehl an das Handy geschickt und der Wert auf 1 gesetzt. Diese Funktion reagiert nicht mehr auf den Wert 1. - Die Empfangsdaten vom UART werden per Interrupt in einen Buffer geschrieben. - In der Mainschleife wird der Buffer ständig auf "\n\r" geprüft. Sobald diese Zeichen gefunden wurden, hat das Handy geantwortet. Jetzt wird "Zustand" um 1 inkrementiert. - Die oben genannte Funktion reagiert auf Zustand = 2, liest dann den Empfangspuffer aus und setzt dann Zustand auf 3 (und sendet ggf. wieder ein Kommando) Damit das Programm bei einem Fehler nicht hängen bleibt, wird mittels eines Timeouts Zustand auf 0 gesetzt. Das ganze sollte soweit funktionieren. Die Frage ist nur, ob es auch irgendwie intelligenter und effektiver gehen könnte. Vielleicht hat hierzu jemand einen Vorschlag. Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt. Vielen Dank! Steffen