VS - Probleme mit rcvchar im RCX

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

VS - Probleme mit rcvchar im RCX
Hi,

Ich hab beim RCX (also der echte Baustein, komplett mit IR-Tower etc, nicht der Simulator) ein Problem mit dem rcvchar. So wie ich es verstanden habe, sollte das ja solange warten bis ein Byte von der Schnittstelle kommt, und mir das dann zurueckgeben. Wenn ich dannach nochmal rcvchar aufrufe, soll das ding wieder warten, bis eben das naechste Byte da ist.
Bei dem ersten Byte klappt das auch (d.h. das rcvchar kommt erst zurueck wenn ich ein Byte abgeschickt habe), aber danach kommt das rcvchar immer sofort mit einem Ergebnis von 0x20 zurueck. Wenn ich dann nochmal was schicke kommt das zwar an, aber anstatt zu warten krieg ich eben 0x20. Damit kann ich natuerlich keine vernuenftige Kommunikation aufbauen, weil ich nicht unterscheiden kann ob ich jetzt wirklich ein 0x20 empfangen habe oder nicht.
Hat jemand anderes ähnliche Probleme? Ist vielleicht einer der RCX’e kaputt?


Ich hab das gleich auch den Meik direkt gefragt. Ich poste das einfach mal, ich hoffe es interessiert jemanden…

das Problem ist die Rückkopplung zwischen dem was der RCX sendet und dem
was er empfängt. Die IR Sendediode liegt direkt neben dem
Enpfangstransistor. D.h. alles was du wegsendest wird sofort wieder
empfangen. Das merkst du auch am Anfang, da nach dem Übertragen der
Firmware das Übertragungsprogramm noch etwas sendet, dadurch fällst du
aus dem rcvchar raus und printf startet die Endlosschleife. (Simulieren
kann man ein angenähertes Verhalten mit dem Simulator und der Option
-irfeedback). Gut was kannst du tun um das zu verhindern?
Eine Möglichkeit du versuchst es selbst rauszufiltern, was etwas
schwierig ist, da im kernel.a ein kleiner Puffer ist, der evtl nochmals
für eine Entkopplung sorgt. Eine andere Möglichkeit liegt darin statt
dem kernel.a das kernel.a.4.realRCX zu verwenden. Hier habe ich versucht
die Rückkopplung gleich beim Empfangen herauszufiltern. Das funktioniert
auch ganz gut auf dem echten RCX, im Simulator gibt es dabei allerdings
Probleme, da hier die IRQs zum Teil in einer falschen (unrealistischen)
Reihenfolge simuliert werden (bedingt durch das fehlende “Zeitgefühl”
des Simulators). Also am einfachsten du nimmst das kernel.a mit dem
Simulator und das kernel.a.4.realRCX für den echten RCX.

Grüße
Meik


Und, hast du es schon damit getestet - ist das wirklich die Loesung?


Nein, noch nicht. Nächste Woche…

Wie hast du das Problem bis jetzt bearbeitet?

Wenn das wirklich die Lösung für das Problem ist, dann wundert es mich dass das nirgends in den Folien etc. erwähnt wird (oder hab ich das irgendwo verpasst???). Dann muss ja quasi jeder, der erfolgreich mit dem RCX arbeiten will, mindestens einmal direkt den Meik danach fragen. Vielleicht ist das ein Trick um eine Statistik über die Arbeitsweise der Studenten zu erstellen…


Nein, das ist Wahnsinn verpackt als Übung…


So, ich hab den neuen Kernel mal getestet, und das Problem scheint damit tatsaechlich behoben zu sein.

Jetzt muss ich mich nur noch um die anderen 10.000 Bugs in meinem Programm kuemmern…