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

Re: threads Kategorie: Programmierung (von ChristianS - 10.11.2010 20:17)
Als Antwort auf threads von ChristianS - 2.11.2010 23:29
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo,
eine Frage zu threads habe ich noch, das habe ich noch nicht richtig verstanden.
Wenn ich die Proritäten von threads ändern möchte, dann starte ich die mit

run <i>Priorität;</i>


Wenn ich das richtig verstanden habe, ist die Std.-Prio 32. Aber was heisst das jetzt konkret?
Habe ich sehr zeitkritische threads, wähle ich dann eine niedrige, oder eine hohe Priorität?

Bsp.
Eine Funktion im main- thread überwacht eine Lichtschranke.Wenn ich durchgehe, wird eine
Beleuchtung eingeschaltet und es wird ein Timer-Thread gestartet, der das Licht zeitverzögert
wieder ausschaltet.
Das Problem dabei ist, dass der Impuls beim Durchlaufen sehr kurz ist und die Funktion
teilweise das Durchschreiten der IR nicht mitbekommt. Das hängt natürlich von der Länge der Loop-
Anweisung im main-thread ab.Deshalb der Gedanke, diese Funktionalität in einen thread mit einer
hohen Prio zu legen, damit die IR zuverlässig auslöst. Was muss ich dann für Prioritäten
vergeben? Welche Prio könnte der sekundengenaue Timer bekommen?

ChristianS.

Hier die IR-Funktion

function Ir () returns int
/******************************************************************************/
/*    Auswertung der Lichtschranke                                            */
/******************************************************************************/
{
 long t;
 t=timeout[0];                                //von int nach long konvertieren
 t=t*1000;
 if Nacht()                                   //IR nur während nacht aktivieren
  {
   if ports.get(ir) and !ir_busy              //warten auf seigende Flanke
    {
     //resetTimer(0);
     ir_busy=-1;                               //Ir() hat High-Pegel
     ir_on=system.timer();                     //Zeitpunkt der steigenden Flanke
     //hwcom.print(" IR steigende Flankern");
    }
   if !ports.get(ir) and ir_busy              //warten auf fallende Flanke
    {
     time.resetTimer(0);
     ir_busy=0;
     time.t_start[0]=-1;                           //damit der Timer bei Tag/Nacht-
     //hwcom.print(" fallende Flankern");   //Ã?bergang nicht startet
     }
  if ir_busy
   if system.timer()-ir_on > t                //...allerdings bei Timeout...
    error_flag=-1;                            //..FehlerCode zurückgeben.
  }
 else
  ir_busy=0;                                  //IR am Tag inaktiv
 return ir_busy;                              //Status zurückgeben
}                                             //0:= Ruhezustand
                                              //1:= High-Signal
/******************************************************************************/


    Antwort schreiben


Antworten: