Fehler in Mausroutine entdeckt - unvorhersagbares Verhalten?

c't-Bot Programmierung in C

Moderator: Moderatoren Team

Antworten
CJ_Vienna
Friends of Marvin
Friends of Marvin
Beiträge: 1
Registriert: 07 Feb 2007, 23:36
Wohnort: Wien

Fehler in Mausroutine entdeckt - unvorhersagbares Verhalten?

Beitrag von CJ_Vienna » 08 Feb 2007, 00:42

wo: in mouse.c in maus_sens_writeByte

zum Rausschreiben der Daten gab es folgendes Statement:[syntax="c"] MAUS_PORT = (MAUS_PORT & (~MAUS_SDA_PINR)) | ((data >> (7 - MAUS_SDA_NR)) & MAUS_SDA_PIN);[/syntax]
richtigerweise sollte es natürlich heißen:
[syntax="c"] MAUS_PORT = (MAUS_PORT & (~MAUS_SDA_PIN)) | ((data >> (7 - MAUS_SDA_NR)) & MAUS_SDA_PIN);[/syntax]
... also MAUS_SDA_PIN anstelle von MAUS_SDA_PINR.

Die dadurch erzeugten Fehler:
* Einige Pins von PortB werden zufällig auf LOW gesetzt - welche konkreten Folgen das auch immer gehabt haben mag.
* Anstelle eines gültigen Commands kann 0xFF an den Mouse-Sensor gesandt werden - welche konkreten Folgen ...

Ich selbst habe Obiges durch eine für mich übersichtlichere Schreibweise ersetzt:
[syntax="c"] if (data & 0x80)
MAUS_PORT |= MAUS_SDA_PIN;
else
MAUS_PORT &= ~MAUS_SDA_PIN;
[/syntax]
... erzeugt sogar etwas kompakteren und rascheren Code. :roll:

eax
Friends of Robby
Friends of Robby
Beiträge: 763
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 08 Feb 2007, 01:49

Hi,

zur Beruhigung: PortB so überzubügeln hat keine Nebenwirkungen. ;-)

Gruß Timo

Antworten