Re: SWCOM OS Bug? Kategorie: Progr. Assembler, TaskingTools, OS (von Newbie - 19.09.2011 10:36) | ||
Als Antwort auf SWCOM OS Bug? von Newbie - 19.09.2011 9:53 | ||
| ||
Fortschritt: Mit der alten Receive Funktion in SWCOM funktioniert alles wie es soll. Der Fehler ist also dort zu suchen! Leider bin ich dazu nicht gut genug. > Ich beziehe mich auf meinen Post > > http://www.cc2net.de/Foren/CC2Net_Forum/lesen.php?eintrag=16231 > > Ich vermute stark, das ein Bezug zu folgendem Post besteht. Langsam vermute ich einen Fehler > weiter unten im "System" - darum jetzt ein Post hier.: > > http://www.cc2net.de/Foren/CC2Net_Forum/lesen.php?eintrag=15567 > > Ausgangslage: Ich verwende SWCOM mit Pegelwandler. Die Routine funktioniert einwandfrei mit HWCOM, > jedoch nicht mit SWCOM. > > Hier der aktuelle Code. Es ist das einzige Modul und thread im Projekt. > > > thread main > { > stports.init(); > stports.alloff(); > lcdext.init(); > swcom.init(); > swcom.setspeed(5); > > byte buffer[32]; //2ter serieller Buffer > byte length; > int Wert1; > int Wert2; > int Wert3; > byte Flag1; > byte Flag2; > byte Flag3; > > mem.fill(buffer,32,0x00); //Löschen > > loop > { > wait swcom.ready(); > wait swcom.rxd(); > > swcom.receive(buffer,9,500); > > Wert1=mem.getint(buffer,0); > Wert2=mem.getint(buffer,2); > Wert3=mem.getint(buffer,4); > Flag1=buffer[6]; > Flag2=buffer[7]; > Flag3=buffer[8]; > > wait swcom.ready(); > swcom.send(buffer,9); //Echo > > lcdext.clear();lcdext.home(); > lcdext.zahl3p(Wert1);lcdext.zahl3p(Wert2);lcdext.zahl3p(Wert3); > lcdext.line(2); lcdext.zahl3p(Flag1);lcdext.zahl3p(Flag2);lcdext.zahl3p(Flag3); > > } > } > > > Wenn ich 9 Zeichen schicke, werden 18 geantwortet. Dabei gibt es immer 8 0x00 nach dem ersten Zeichen, > dass sich einschiebt. z.B. "ABCDEFGI" wird zwar wiedergegeben, aber mit 8x 0x00 nach dem A > > Bei Zahlen, zb. 0x01 0xF4 0x00 0xF0 0x01 0x2C 0x01 0x01 0x01 dasselbe > > Jetzt kommt das Verrückte: Wenn ich am Anfang noch ein Zeichen mehr anhänge > > 0x01 0x01 0xF4 0x00 0xF0 0x01 0x2C 0x01 0x01 0x01 > > wird korrekt geparst! D.h. das erste Zeichen scheint für mem.getint verloren gegangen zu sein, ist jedoch > da, wie man am Echo des Ports feststellen kann! Das selbe ist reproduzierbar mit Text. > > Irgendwie kommt es zu einem selektiven Shift nach links. Dies erfolgt ab dem ersten Loop. Lässt sich > auch ganz einfach mit einem String testen. Z.b. indem man ihn im LCD anzeigen lässt: > > lcdext.home(); > lcdext.printlength(buffer,9); > > Das erste Zeichen wird verschluckt und der ganze String nach links geschoben. Beim Echo treten > 8 Zeichen nach dem ersten - das offenbar doch da war - auf, welche dort nicht hingehören. > > Ich habe zwei verschiedene CC2 benutzt mit zwei verschiedenen Pegelwandlern. Eine Brandneu. Beide > Aktuell. > > Hat jemand eine Idee? Workaround? > | ||
Antwort schreiben Antworten: |