Hi Leute, Ein Mitstudierender und ich versuchen im Moment, Daten die vom Rechner kommen mit dem Microcontroller zu empfangen. Im web und der uni-bibliothek haben wir uns so gut es ging mit der Methode "empfangen" vertraut gemacht. Das Programm funktioniert aber leider nicht so, wie wir es uns vorgestellte haben. Wir hoffen auf einige tipps und tricks von euch. Im Anhang findet ihr das C-Programm und die Headerdatei die wir benutzt haben. gruß
for(;;) { *pt_empfangene_daten = uart_getc_wait(); pt_empfangene_daten++; //zählt pointer pt1 hoch, setz damit Adresse im Array ein weiter } is das nicht ne Endlosschleife? irgendwann wird dein Speicher überlaufen und nix passiert....
Hi Schade, das ich von C nicht so viel Ahnung habe, aber hier gibt's ein Tutorial in Assembler. Sehr schön und verständlich. Ich habe mir einen Buffer im Variablenbereich eingerichtet und dort werden einlaufende Zeichen (der UART macht's mit Interupt) eingetragen. Ich benötige dafür ein Zeigerregister für die Adresse des Buffers und zwei Offsetvariablen, um für Lese- und Schreibzugriffe die Adresse von der Basisadresse des Buffers zu berechnen. Sind die Lese- und Schreiboffsets gleich, ist kein neues Zeichen gekommen. In der ISR wird beim Eintreffen eines neuen Zeichens die Offsetvariable für Schreibzugriffe erhöht und auf die Größe des Buffers geprüft. Ist sie größer, setzt man sie auf 0 und fängt wieder bei der Basisadresse an. (Ringpuffer) Anschließend addiert man die Offsetvariable auf die Basisvariable und trägt das eingetroffenen Zeichen ein. Im zyklischen Programm (polling) vergleicht man Lese- und Schreiboffset. Ist ein Unterschied, erhöht man den LeseOffset, vergleicht ihn mit der Puffergröße und setzt ihn evtl. zurück. Anschließend addiert man auf die Basisadresse den Leseoffset und holt sich das eingetroffene Zeichen zur Bearbeitung. Ich hoffe, es war verständlich. Gruß oldmax
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.