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 Torsten - 23.10.2004 17:52)
Als Antwort auf CAN Sende- und Empfangsthreads von Dagmar - 20.10.2004 16:00
Ich nutze:
C-Control II Station
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)