CAN Sende- und Empfangsthreads Kategorie: CAN-Bus (von Dagmar - 20.10.2004 16:00) | ||
| ||
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 Torsten - 23.10.2004 17:52) Re: CAN Sende- und Empfangsthreads (von Peter - 14.02.2005 20:07) Re: CAN Sende- und Empfangsthreads (von reneforster - 20.10.2004 18:58) |