Re: CAN Sende- und Empfangsthreads Kategorie: CAN-Bus (von Torsten - 23.10.2004 17:52) | ||
Als Antwort auf CAN Sende- und Empfangsthreads von Dagmar - 20.10.2004 16:00 | ||
| ||
Hallo, du musst zwei unterschiedliche Kanäle wählen. Da beide CC's asynchron laufen und auf dem gleichen Kanal senden und empfangen, ist es keine gerichtete �bertragung möglich. Torsten > Hallo, > also ich bin relative neu in dem Gebiet und soll später mal ein modifiziertes CAN-Bus Protkoll > entwickeln. Doch zuerst hab ich noch ein paar "Kinderschuh"-Probleme: > Also hoer die Aufgabe, die ich gerade machen will: > Habe 2 COntroller, die über CAN miteinander kommunizieren. Ein Controller schickt dem anderen eine > kleine Rechenaufgabe, die der zweite Controller ausrechnen soll und dem ersten das Ergebnis > zurückschickt, und dieser das Ergebnis auf dem Display ausgibt. Wenn ich den einem nur schicken > und den anderen nur empfange lasse klappt alles auch wunderbar. Jetzt ahb ich noch 2 Threads > zusätzlich gemacht, damit der einen auch empfangen und der andere auch senden kann. Das geht nur > irgendwie nicht so wie ich will. > Hier mal mein Code, da ich mich noch nicht so gut damit auskenne, kann es sein, dass ich da > irgendwas übersehen habe. > Für Anregungen wäre ich sehr dankbar :) > Dagmar > > > int result; > //------------- > thread send > //------------- > //Controller 1: dieser Thread stellt die Rechenaufgabe und sendet die Parameter > { > run 20; > sleep 200; > byte send_data[2]; > int a; > int b; > loop{ > a= 10; > b= 11; > send_data[0]=a; > send_data[1]=b; > > lcdext.home(); > lcdext.zahl2(a); > lcdext.put('+'); > lcdext.zahl2(b); > lcdext.put('='); > lcdext.put('?'); > > if can.ready(1) == -1 { > can.send(1,100,send_data,2); > } > > } > } > //------------- > thread recieve > //------------- > //Controller1: dieser Thread soll das Ergebnis empfangen und auf dem Display ausgeben > { > run 5; > int a; > int b; > byte get_res[1]; > get_res=100; > can.expect(1,100); > sleep 200; > loop{ > if can.rxd(1) > { > can.get(1,get_res); > lcdext.goto(2,1); > lcdext.zahl2(a); > lcdext.put('+'); > lcdext.zahl2(b); > lcdext.put('='); > lcdext.zahl2(get_res[0]); > } > break; > } > } > > > //------------- > thread compute > //------------- > //Controller2: dieser Thread empfängt die Aufgabe und berechnet das Ergebnis > { > run 5; > byte buffer[2]; > > can.expect(1,100); > buffer=100; > sleep 200; > loop > { > if can.rxd(1) > { > can.get(1,buffer); > lcdext.home(); > lcdext.zahl2(buffer[0]); > lcdext.put('+'); > lcdext.zahl2(buffer[1]); > lcdext.put('='); > result = buffer[0] + buffer[1]; > > lcdext.zahl(result); > } > > } > } > > //------------- > thread send_computed > //------------- > //Controller2: dieser Thread schickt das Ergebnis an Controller1 zurück > { > > run 5; > sleep 200; > byte res[1]; > res[0]= result; > sleep 200; > loop{ > can.send(1,100,res,1); > } > } > > //------------- > thread main > //------------- > > { > lcdext.init(); > can.init(0,0x0000,0x0000); > sleep 1000; > > run send; > run recieve; > //run compute; > //run send_computed; > halt; > } > | ||
Antwort schreiben Antworten: Re: CAN Sende- und Empfangsthreads (von Peter - 14.02.2005 20:07) |