Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, CC2-Application-Board
> 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: