Empfang von CAN BUS Daten Kategorie: CAN-Bus (von Thomas Horn - 16.09.2002 16:34) | |
| |
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); } | |
Antwort schreiben Antworten: |