flueke
12.02.2007, 09:15
Hallo allerseits,
bei dem Versuch mich mit meinem Asuro unterhalten zu können bin ich auf ein
ärgerliches Problem gestossen:
Wenn ich direkt nach einem Aufruf von SerWrite() das Gegenstück SerRead()
ausführe werden immer Daten empfangen auch wenn vom PC keine neuen Daten
verschickt wurden. Verhindern kann ich den Effekt indem ich nach dem Aufruf von
SerWrite() eine Pause via wiederholtem Sleep() einbaue. Eine Zehntelsekunde
genügt schon und der Effekt tritt nicht mehr auf, d.h. ein blockierendes Lesen
von seriellen Daten blockiert dann auch wirklich.
Wie kommt es zu dem Effekt und falls wirklich eine Pause zwischen Schreiben und
Lesen nötig ist wie lang muß diese dann sein?
In dem Zusammenhang sind vielleicht auch die letzten zwei Zeilen von SerWrite()
interessant:
for (i = 0; i < 0xFE; i++)
for(length = 0; length < 0xFE; length++);
Hier wird ja nichts anderes gemacht als einige (254*254) Zyklen zu verzögern.
Einen Kommentar dazu gibt es nicht und eine Suche hier im Forum hat auch nichts
ergeben.
Anmerkungen:
Mein Asuro ist nicht modifiziert. Ich benutze einen seriellen Port also keinen
USB-Adapter und, wie im Titel schon erwähnt, habe ich auch keine Probleme den
Bot zu flashen.
Schonmal Danke für erleuchtende Erklärungen!
Grüsse,
Florian
bei dem Versuch mich mit meinem Asuro unterhalten zu können bin ich auf ein
ärgerliches Problem gestossen:
Wenn ich direkt nach einem Aufruf von SerWrite() das Gegenstück SerRead()
ausführe werden immer Daten empfangen auch wenn vom PC keine neuen Daten
verschickt wurden. Verhindern kann ich den Effekt indem ich nach dem Aufruf von
SerWrite() eine Pause via wiederholtem Sleep() einbaue. Eine Zehntelsekunde
genügt schon und der Effekt tritt nicht mehr auf, d.h. ein blockierendes Lesen
von seriellen Daten blockiert dann auch wirklich.
Wie kommt es zu dem Effekt und falls wirklich eine Pause zwischen Schreiben und
Lesen nötig ist wie lang muß diese dann sein?
In dem Zusammenhang sind vielleicht auch die letzten zwei Zeilen von SerWrite()
interessant:
for (i = 0; i < 0xFE; i++)
for(length = 0; length < 0xFE; length++);
Hier wird ja nichts anderes gemacht als einige (254*254) Zyklen zu verzögern.
Einen Kommentar dazu gibt es nicht und eine Suche hier im Forum hat auch nichts
ergeben.
Anmerkungen:
Mein Asuro ist nicht modifiziert. Ich benutze einen seriellen Port also keinen
USB-Adapter und, wie im Titel schon erwähnt, habe ich auch keine Probleme den
Bot zu flashen.
Schonmal Danke für erleuchtende Erklärungen!
Grüsse,
Florian