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.