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

Re: Betriebssystem laden Kategorie: CC2-Unit & Appl.Board / CC2-Station (von smy42 - 2.09.2004 10:41)
Als Antwort auf Re: Betriebssystem laden von André H. - 30.08.2004 22:21
Ich nutze:
C-Control II Station, OSOPT V3.0
> Hallo Stefan,
>
> > DANKE, funktioniert jetzt endlich!!
> > (das mit den libs könnt man auch unsaubere Programmierung nennen, aber seit BillyBoy
> > gibts das Wort ja eh nicht mehr hihihi)
>
> Naja, mit dem Programmieren selbst hat das Fehlen von Libs eher nicht zu tuen.
> Eher mit einer falschen Annahme von Vorraussetzungen.
> Ich konnte schlieÃ?lich nicht ahnen, daÃ? in WinXP weniger DLLs sind, als in
> den Vorgängerversionen. ;-)
>
> > Achja, noch nen Kommentar zu der Timeout-Hostmode-Routine:
> > Wenn die Station in der
> > Timeout-Wartezeit ist, nimmts keinen Hostmode mehr an! (versteh ich zwar nicht warum, aber in
> > die inline-codes wollt ich als Anwender nicht unbedingt einsteigen :-)
> > Ich hatte da so ein kurzes LED-Lauflicht, da war dann die Aufenthaltswahrscheinlichkeit
> > im timeout-wait groÃ?, und da wollt das Ding fast nicht mehr in Hostmode....
> > Hab den Host-Timeout auf 10ms gesetzt, das geht trotz kurzem Programm ganz gut.
> > (auch unter XP! *grins*)
>
> Ich weiÃ? hier nicht genau, was Du meinst. Poste doch bitte einfach einmal
> den Programm-Code bzw. Programmauschnitt, mit dem dies auftritt.
>
> > Das 2. 254 wird doch seltenst zwischen rxd und receive-timeout empfangen, sondern liegt
> > ca. (200µs+Windows-Latenz) nach dem 1. 254 bei 57600 (500µs+ bei 19200) im buffer...
>
> Das zweimalige ASCII(254) wird von DL-Tool als eine Datenfolge gesendet.
> In den Beispiel-Routinen ist die Wartezeit höher, um sicherzugehen, wenn hier
> z.B. Windows nicht ganz mitspielt. Seit WinXP muÃ? man mit soetwas rechnen.
> Die Wege es WinXP sind eben unergründlich. Das ist ein Grund, warum ich kein WinXP nutze.
>
> > Ausserdem hab ich da einen unangenehmen Verdacht:
> > Hat ein yield (z.B. hwcom 1.4) höhere priorität als ein capture? Das stört dann die Sync der seriellen
> >  Schnittstellen-Threads ganz schön...
>
> Yield und Capture sind zwei paar Schuhe, und haben direkt nichts miteinander zu tun.
> Ein Capture dient zum Schutz von Ressourcen, damit kein Durcheinander entsteht. (syncronisieren)
> Ein Yield gibt die Rechenzeit vorzeitig ab, sodaÃ? alle anderen Threads erst Ihre Anzahl
> an VM-Instruktionen (oder falls ein wait, sleep oder yield kommt, bis dahin) abarbeiten,
> danach kommt der Thread wieder dran.
>
> Man kann aber ein yield als ein Pseudo-Capture miÃ?brauchen, was ich gerne hin und wieder mache,
> wenn nur für wenige VM-Instruktionen ein Thread nicht unterbrochen werden darf.
> Dies kann man für bis zu 255 VM-Instruktionen machen.
>
> Bei einem Capture kommt es aber auch innerhalb gecaptureter Routinen zu Threadwechsel !
>
> MfG André H.

Hallo André

Mit den Captures ist jetzt klar, hab ich mir nochmal angeschaut: Ist nur ein kooperativer Handshake!
Mein Problem mit der Ablaufsteuerung muss ich über Taskprioritäten und Funktions-Aufrufreihenfolgen
lösen.
Frage hierzu: kann ein Thread sich volle Rechenzeit holen, ohne alle anderen Threads explizit zu kennen?
(halt X; halt Y... geht nur, wenn ich alle laufenden threads namentlich hab; da muss ich alle HALTen
und dann resumen... (und wehe ich vergess einen oder ein threadwechsel funkt dazwischen :-))
Sind run, halt und resume eigentlich 1 VM-Befehl oder mehrere?
so wie ich das sehe ist auch ein run 255 kein single thread abarbeitung, sondern heisst
255 OpCodes thread X, dann 32 (oder wieviel ich halt eingestellt hab) OpCodes main, 32 thread Y usw.?
naja, ich werd mal wieder akademisch neugierig, ich machs mit Funktionsaufrufen!

Zu der Hostmode-Routine:


thread waithost// Thread vom main-thread aus starten
{
 hwcom.init();
 hwcom.setspeed(8);
 loop
 {
  if hwcom.rxd();
       {//stports.setRel(1,-1);

/*sobald rel1 an ist, geht "Ã?bertragen" nicht mehr:
main stoppt, c-control antwortet nicht.
Nochmal "Ã?bertragen" funzt dann wieder
(jetzt; hab das alte Prog schon weggeworfen gehabt und jetzt erstmal neu geschrieben...
jetzt gehts besser)

ohne Rel und sleep: manchmal gehts beim ersten Versuch, manchmal brauchts mehrere...

die setRel sind als "Debug" stationen drin, die delays zum besseren "Treffen"
der kritischen Zustände im Prog.

*/

//       sleep 500;
    if hwcom.get()==254
       {byte x[2];
//        stports.setRel(2,-1);
//        sleep 500;
        x[1]=hwcom.receive(x,1,1000);
        if x[0]==254 and x[1]==1 quit 1;// Hostmode einleiten
       }

    // Platz für eigene Schnittstellenroutinen ...

    hwcom.flush();
   }
  // weiterer Programm-code ...

 }
}

/*Meine Version:

//Hostmode durch 2x 254 per rs232 einleiten. cc2net.de-DLTool, modifiziert: SMy 040824
thread waithost// Thread vom main-thread aus starten
{byte hostmode, x[2];
 hwcom.init();
 hwcom.setspeed(8);
 loop
 {if hwcom.rxd();
  {x[2]=hwcom.receive(x,2,10);
   if x[0]==254 and x[1]==254 and x[2]==2 quit 1;// Hostmode einleiten
   hwcom.flush();
  }
 }
}
*/




thread main
{byte i;
 run waithost;
 stports.init(); //der muss natürlich vor run waithost!!
 for i=1...8
  {stports.setLED(i,-1);
   sleep 10;
  }
 stports.alloff();
}




    Antwort schreiben


Antworten:

Re: Betriebssystem laden (von André H. - 4.09.2004 9:23)