Mein Atmega32 möchte ich gerne per UART und einer GUI auf dem PC konfigurieren. Soweit funktioniert die Kommunikation auch. Einziges Problem was ich jetzt habe ist der Aufbau der Kommunikation. Es muss immer erst der "Config"-Button der GUI angeklicket werden. Jetzt wird in einer while-Schleife auf ein Zeichen des Atmels gewartet. Dieses wird gesendet, wenn ein Taster auf dem Atmel-Board betätigt wird. Dann werden die Daten jeweils ausgetauscht. Nun will ich aber erreichen, dass es egal ist, ob ich erst den Config-Button anklicke oder den Taster auf dem Board. Ein erster Versuch war, dass der Controller einmal in der Sekunde ein Zeichen sendet. Wenn ich jetzt den Config-Button klicke, wartet die GUI auf das Zeichen, empfängt es und macht ganz normal weiter. Das Problem was ich jetzt habe ist das die GUI abstürzt, wenn ich erst die Taste drücke und dann den Config-Button klicke. Umgekehrt funktioniert alles wie gehabt. Ich vermute, das Problem liegt nicht auf der Controller-Seite. Für die GUI nutze ich Qt mit der QextSerialPort Bibliothek.
Wenn Dein GUI abstuerzt weil ein Zeichen ueber die serielle Schnittstelle empfangen wird, wuerde ich den Fehler erstmal nicht im Controller suchen... ;) Volker
IMHO ist dieses ganze Vorgehen Mist. Nichts gegen Autoconfig. Das ist super, wenn es in einem Einstelldialog angeboten wird (obwohl man das meistens sowieso nicht braucht. Ein halbwegs Nicht-DAU Benutzer kennt die Baudrate, die sein angeschlossenes Gerät benutzt). Aber für den täglichen Hausgebrauch reicht es völlig aus, wenn das PC-Programm die Einstellung der Schnittstelle zb in der Registry speichert und sie von dort beim nächsten Programmstart wieder restauriert. > Das Problem was ich jetzt habe ist das die GUI abstürzt, wenn > ich erst die Taste drücke und dann den Config-Button klicke. Programm unter Debugger Kontrolle laufen lassen und nachsehen, wo der Absturz passiert. Eventuell auf dem Stack die Aufrufhierarchie verfolgen um Nachszusehen wie es zum Absturz gekommen ist. Aber in erster Linie würde ich dieses Zwangs-Autoconfig ausbauen.
Was genau ist mit Autoconfig gemeint? Falls es sich dabei um Baudrate, etc. handelt, so lege ich diese Konfigruation selber im Quellcode fest. Wenn ich den Debugger beim Atmel mitlaufen lasse und hier und da Breakpoints setzte, habe ich das oben von mir beschriebende Problem komischer Weise nicht.
Mir ist noch etwas aufgefallen. Wenn ich debugge, dann den Programmablauf stoppe, ist das Receive Interupt Flag aktiviert. Erst wenn ich es händisch lösche läuft die Kommunikation ganz normal weiter.
UART-Boy schrieb: > Was genau ist mit Autoconfig gemeint? Falls es sich dabei um Baudrate, > etc. handelt, so lege ich diese Konfigruation selber im Quellcode fest. Uups. Dann hab ich wohl das hier > Es muss > immer erst der "Config"-Button der GUI angeklicket werden. Jetzt > wird in einer while-Schleife auf ein Zeichen des Atmels gewartet. > Dieses wird gesendet, wenn ein Taster auf dem Atmel-Board betätigt > wird. Dann werden die Daten jeweils ausgetauscht. misinterpretiert. Mea culpa. Tut mir leid.
UART-Boy schrieb: > Wenn ich den Debugger beim Atmel mitlaufen lasse und hier und da > Breakpoints setzte, habe ich das oben von mir beschriebende Problem > komischer Weise nicht. Du musst auf PC Seite nach dem Problem suchen. Das kann alles mögliche sein.
was macht dich so sicher, dass ich das Problem auf dem PC suchen muss?
Deine GUI läuft auf dem PC. Und es ist dein GUI Programm, das abstürzt. Mag sein, dass dein µC dem PC irgendetwas sendet, was der nicht erwartet. Aber ein Programm, welches crasht, hat immer einen Bug. Egal was der µC zum PC sendet, das Programm auf dem PC MUSS damit klarkommen und darf auf keinen Fall abschmieren. Wenn in deinem Auto das Wasser steht, ist der Fehler auch beim Auto zu suchen und nicht bei der Waschstrasse durch die du gefahren bist.
Ich habe jetzt das Problem behoben, indem ich die Uart-Schnittstelle des Microcontroller einmal in der Sekunde neu initialisiere, solange bis die Kommunikation aufgebaut ist. Die GUI schneint damit Probleme zu haben, wenn ich von der Uart-Schnittstelle des Mic. etwas sende und dann erst die Uart-Schnittstelle auf dem PC initalisiere und dann etwas empfangen will.
Das macht zwar keinen Sinn, aber Hauptsache ist ja dass es funktioniert. ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.