Re: receive hwcom Kategorie: Programmierung (von André H. - 18.07.2011 11:41) | ||
Als Antwort auf Re: receive hwcom von Wilfried Maier - 18.07.2011 11:06 | ||
| ||
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: 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(); } } 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: hwcom.send(s, x); 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.: x = hwcom.receive(s,30,300); 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: s[31] = hwcom.receive(s,30,300); Dann kannst Du hwcom.print2() verwenden. MfG André H. PS: Benutze beim Posten von Quelltext bitte die Code-Tags. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: receive hwcom (von Wilfried Maier - 18.07.2011 14:56) Re: receive hwcom (von André H. - 18.07.2011 19:29) Re: receive hwcom (von Wilfried Maier - 19.07.2011 15:59) |