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

Re: ports Kategorie: Programmierung (von André H. - 1.11.2003 13:18)
Als Antwort auf ports von helmut - 29.10.2003 15:39

Hallo Helmut,

Wenn Du schon Multithreading verwendest, solltest Du die Threads nur gezielt laufen lassen.
AuÃ?erdem muÃ?t Du Deine Variable "re" capturen, da Du von mehreren Threads darauf zugreifst.
Das führt zwangsläufig zu Problemen.
Au�erdem Bremst du mit run 5 die CC2 unnötig aus. Lasse einfach die Standardprio.
Auch versuchst Du im Mainthread ein empfangendes Bytearray als String zu bearbeiten.
Das geht nicht.
Wenn Du mit hwcom.receive() etwas empfängst und einen String angibst, bleibt
die Längenangabe des Strings beim alten Wert.
Auch wertest Du den String falsch aus, wenn Dein Format "RxTyyyy" ist.


Hier mein Vorschlag:

int re,time[3];
thread r1
{
 ports.set(1,1);
 sleep time[0];
 ports.set(1,0);
 halt;
}

thread r2
{
 ports.set(3,1);
 sleep time[1];
 ports.set(3,0);
 halt;
}

thread r3
{
 ports.set(5,1);
 sleep time[2];
 ports.set(5,0);
 halt;
}

function setStrlen(byte s[], byte len)
{
 s[31]=len;
}

thread main
{string zeit,s;
 byte i,y,port;
   
 hwcom.init();
 hwcom.setspeed(hwcom.SPEED_9600);
 hwcom.flush();

 loop
 {
//  hwcom.inputsStr(s,1);
  i=hwcom.receive(s,10,1000);
  setStrlen(s,i);
  if i
   {
    y=strx.getchar(s,0);
    if y=='x' quit -1;
    if y=='R'
     {
      port=strx.getchar(s,1)-0x30;
      if port<3 and port>0
       {
        strx.right(s,zeit,str.length(s)-3);
        hwcom.ret();
        hwcom.put('R');
        hwcom.put(port+0x30);
        hwcom.put('T');
        hwcom.print(zeit);
        time[re-1]=strx.getNum(zeit);
        if re=1 run r1;
        else
        if re=2 run r2;
        else
        if re=3 run r3;
        wait hwcom.ready();
       }
     }
   }
 }
}


Ich hab's zwar nicht getestet, aber es sollte funzen.

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: