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

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

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.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB