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 > > ich möchte über einen CAN Bus mittels can.send(int channel, int id, byte buf[], int lenght ) Nachrichten senden, solange keine CAN BUS Nachrichten über can.rxd (int channel) empfangen werden. Wenn doch, dann > unterbreche das Senden von CAN BUS Nachrichten. Das Problem ist, wenn man ein Thread can_send > für das Senden und einen Thread can_rxd für das Empfangen von CAN BUS Daten verwendet, dann soll nach Ausführung von von can_rxd wieder der Thread can_send gestartet werden (Ausführung des Hauptprogramms > wie bei einer loop Anweisung ohne Neustart des Programms, sodaß das entweder CAN BUS Daten ständig gesendet oder empfangen werden können). Neustart des Progrmms nur, wenn ein CAN BUS Fehler auftritt. > > Außerdem möchte ich eine Meldung über das Display der CC2 - Unit als Bestätigung ausgeben lassen, > wenn CAN BUS Nachrichten gesendet werden und eine Meldung über das LCD - Display ausgeben lassen, > wenn CAN BUS Daten empfangen werden > > Wie kann man das am besten machen, so daß ich nicht in einer loop Anweisung stecken bleibe beim Senden > von CAN BUS Daten, obwohl über can.rxd( ) schon wieder CAN BUS Daten empfangen werden können ? > > Könnte man auch gleichzeitig zwei Threads ausführen lassen, sodaß das quasi gleichzeitig CAN BUS Daten > gesendet und empfangen werden können ? > > Hier mein Programm (Auszug) mit den wesentlichen Anweisungen: > > int channel; //Globale Variablen > int id; > byte data[7]; > > thread can_send > { > int n; > byte data[n]; > n == 7; > id = 100; > > if can.ready(channel) > loop > { > for channel = 0...6 //Kanäle 0...6 dienen zum Senden,die restlichen zum Empfangen > can.send(channel,id,data[n],8); > lcdext.home(); > lcdext.print(data,7); > // lcdext.put(myconst.DPP); > sleep 250; > } while not can.rxd ( ); > > } > > thread can_rxd > > { byte buffer[255]; > can.init(0,0x0000,0x0000); > > for channel = 7...13 & id = 0...999 > { > if can.rxd(channel) // Sobald Nachrichten verfügbar sind, empfange jede Nachricht, egal > can.expect (channel,id); // mit welcher id (Kanäle 7...13 dienen zum Empfangen) > } > can.get(channel,buffer); > s = "Daten empfangen"; > > loop // Ausgabe auf dem LCD - Display > { > lcdext.print(s); /* LCD - Display Ausgabe */ > /* sleep 1500; > lcdext.clear(); > sleep 1500; > } while not can.expect( ); > } > > > thread main > { > lcdext.init(); > can.init(0,0x0000,0x0000); > sleep 1000; > > loop > { > run can_send > if can.rxd (channel ); > break; > } > > sleep 1000; > > loop > { > run can_rxd; > if can.ready ( ) > break; > } > yield // Nach der dieser loop Anweisung soll wieder gesendet werden,ist das so richtig ? > > if can.error( ) // falls unerwartet ein Übertragungsfehler auftritt > quit (- 1); > } >