PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : M128 - Bug in Serial_IRQ_Info



Fabian E.
30.05.2010, 18:13
Hallo,
nicht nur ich scheine das Problem zu haben, dass die Funktion Serial_IRQ_Info, die eigentlich die Anzahl der auf der Seriellen Schnittstelle empfangenen Zeichen zurückgeben soll, einen Bug hat.
Genaueres dazu gibt es hier im Forum (http://ccpro.cc2net.de/forum/index.php?show=1187).
Kurze Version: Die Methode verzählt sich beim Rechnen mit dem Buffer und liefert deswgen total falsche Ergebnisse...

Hat jemand eine Idee wie ich den folgenden Code ohne die Benutzung dieser Methode effektiv gestalten könnte?

void task_Commands(void)
{
byte count;
count = Serial_IRQ_Info(0,RS232_FIFO_RECV);
print("Count: "); printInteger(count); //Hier hat man dann gesehen, dass ständig Zahlen über 200 kamen, nachdem der Roboter erst mal einen Befehl erhalten hat. Danach hat er jegliche Befehle ignoriert, da ja count auch auf < 200 geprüft wird...
if(count > 0 && count < 200) //Diese 200 hier war auch schon der Versuch eines Fehlerbehebens, bevor ich wusste was wirklich passiert...
{
do
{
unsigned char tmp;
tmp = Serial_ReadExt(0);
if (tmp =='#')
{
Thread_Delay(1);
counter = 0;
}
if(tmp == '*')
{
count = 0;
}
text[counter] = tmp;
text[counter + 1] = 0;
counter++;
if(count > 0)
count--;
} while(count > 0 && count < 200); //Diese 200 hier war auch schon der Versuch eines Fehlerbehebens, bevor ich wusste was wirklich passiert...
byte cmd;
cmd = getCommand();
if(cmd)
{
switch(cmd)
{
//Auswertung von CMD, für das Problem nicht so wichtig...
}
cmd= 0;
}
}
}

Kann mir bitte jemand helfen? =)

Fabian E.
30.05.2010, 18:20
Hmmm...Also ich habe diese Abfrage count < 200 nochmal rausgenommen und jetzt scheint erst mal alles zu klappen...
Count wird wieder richtig ausgelesen und alles klappt.
Jemand eine Idee warum?

Mc Delta
31.05.2010, 14:21
Vielleicht musst du den Vergleich && durch || ersetzten.