Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Station, OSOPT V3.1
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: