Re: CAN Sende- und Empfangsthreads Kategorie: CAN-Bus (von Peter - 14.02.2005 20:07) | ||
Als Antwort auf Re: CAN Sende- und Empfangsthreads von Torsten - 23.10.2004 17:52 | ||
| ||
> 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; > > } > > Kannst Du mir mitteilen wie Dein Problem gelöst wurde, ich habe im Moment genau das Selbe Muss man beim can.init eine andere Einstellung wählen ?? Danke für Antwort Peter | ||
Antwort schreiben Antworten: |