Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > > Hallo Wilfried, > > > > > Ich habe die Reihenfolge umgestellt, doch der Funktionsaufruf bleibt nachwievor beim hwcom.receive trotz Timeout=300 stecken. > > > Bin derzeit ziemlich ratlos. > > > > Woher weißt Du, daß das Programm bei hwcom.receive() hängen bleibt? > > Du hast keinerlei Debuggingausgaben. > > Denn so, wie Du Dein Programm geschrieben hast, wird es nie zu irgendeiner Ausgabe kommen. > > > > Ich mache mal ein paar Anmerkungen in Deinem Programm: > > <code>thread main > > { > > int x,anz; > > byte s[32]; //<-- hier definierst Du ein Bytearray, keinen String > > > > hwcom.init(); // der Init ist hier unnötig, hwcom wird nach einem Reset automatisch vom OS initialisiert > > hwcom.setspeed(hwcom.SPEED_57600); > > > > loop > > { > > wait hwcom.rxd(); //<-- Du wartest hier bis mind. ein Zeichen empfangen wird. > > anz = hwcom.inbuffercnt(); //<-- hier wird selten etwas anderes außer 1 drinstehen, selten mal eine 2 > > hwcom.print("Anzahl : "); hwcom.num(anz); hwcom.ret(); > > > > // Daten empfangen > > x = hwcom.receive(s,anz,300); //<-- Warum ein Timeout? Die Zeichen sind schon im Puffer > > // und Du empfängst nur max. so viele, wie nach der Abfrage im Puffer sind. > > hwcom.print2(s); //<-- Das kann nicht funktionieren. Prinfunktionen geben immer einen Strin aus. > > // Du übergibst aber ein reines Array ohne Stringinformationen. Da in s[31] nichts geschrieben wurde. > > hwcom.flush(); > > } > > }</code> > > > > So gesehen, macht Dein Programm genau das, was Du geschrieben hast. > > Und zwar: nie eine Ausgabe, außer es steht in s[31] ein anderer Wert als 0. > > Wenn Du den Inhalt eines reinen Bytearrays senden willst, muß Du hwcom.send() verwenden. > > In Deinem Fall: > > <code> hwcom.send(s, x);</code> > > > > Aber: Du wirst nie mehr als ein bis zwei Zeichen gleichzeitig empfangen, da Du direkt nach > > dem Warten auf ein empfangenes Byte, Die Anzahl der Bytes im Puffer ausliest, und damit > > die zu empfangenen Zeichen festlegst. > > Besser ist es, wenn Du einfach eine feste max. Länge vorgibst. > > z.B.: > > <code> x = hwcom.receive(s,30,300); </code> > > Nur so werden bis zu 30 Zeichen empfangen, sofern nicht zwischen zwei Zeichen eine Pause > > größer 300ms eintritt. Ansonsten eben weniger. > > Und wenn Du Dein Bytearray als String verwenden willst, muß Du in s[31] die Anzahl > > der Zeichen schreiben. z.B. so: > > <code> s[31] = hwcom.receive(s,30,300); </code> > > Dann kannst Du hwcom.print2() verwenden. > > > > MfG André H. > > > > PS: Benutze beim Posten von Quelltext bitte die Code-Tags. > > Hallo André, > > Danke für die ausführliche Beschreibung. Ich habe Deine Vorgaben umgesetzt, jedoch ohne Erfolg. > > Nun habe ich den Thread auf Minimalanforderung beim <b>receive</b> wie folgt begrenzt. > > <code>thread main > { > int x; > byte s[32]; > > hwcom.setspeed(hwcom.SPEED_57600); > loop > { > wait hwcom.rxd(); > x = hwcom.receive(s,1,300); > hwcom.send(s,x); > } > }</code> > > Es erfolgt jedoch keine Ausgabe. > > Wenn ich nun statt dem <b>receive</b> ein <b>get</b> verwende, und die Zeichen einzeln ausgebe, > wird genau das zurück gesendet, was vor empfangen wurde. > Dabei ist kein Unterschied ob ich die Bytes einzeln oder in einen ganzen Paket aufeinmal zur CC2 sende. > > Ich weiß daher immer noch nicht, wo mein Denkfehler liegt. > > MfG Wilfried > > <code> > thread main > { > byte c; > > hwcom.setspeed(hwcom.SPEED_57600); > loop > { > wait hwcom.rxd(); > c = hwcom.get(); > hwcom.put(c); > } > } > > </code>