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