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

CAN Sende- und Empfangsthreads Kategorie: CAN-Bus (von Dagmar - 20.10.2004 16:00)
Ich nutze:
C-Control II Unit, OSOPT V3.0
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)