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

wait in Funktionen Kategorie: Programmierung (von wema - 18.05.2006 12:58)
Ich nutze:
C164CI-ControllerBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo,

ich bin zur Zeit dabei, meine seit 1,5 Jahren selbstentwickelte Haussteuerung (Heizung, Kaminkessel,
Solaranlage sowie Rollläden) zu optimieren. Dabei bin ich auf einen Thread gesto�en, welchen ich
zu Beginn meiner Programmierarbeiten zur Tastenabfrage eingesetzt habe. Hier der Code:

{
  int tasterAllLast1,tasterAllLast2;
  int tasterModul1,tasterModul2;
  int tasterAllChange1,tasterAllChange2, tasterAll1,tasterAll2;
  int x;
  byte port;
  long tasteDauer[31];

  //Initialisieren
  tasterAllLast1=0;
  tasterAllLast2=0;
  loop
  {
    wait not ports.get(11); //warten auf einen Interrupt
    tasterAllLast1=tasterAll1;
    tasterAllLast2=tasterAll2;
    tasterAll1=max7311.getw(1);//Das Wort wird gelesen aus Modul 1 -Spitzboden...
    tasterAll2=max7311.getw(2);//... und Modul 2 - Keller
    tasterAllChange1 = tasterAllLast1 xor tasterAll1;
    tasterAllChange2 = tasterAllLast2 xor tasterAll2;
    for port= 0 ... 15 // Spitzboden
    {
      x=1 shl port;
      if tasterAllChange1 and x
      // Wird beim Drücken und Loslassen ausgeführt !
      {
        if tasterAll1 and x //  Taste gedrückt
        {
          tasteDauer[port]=system.timer();//Timer wird gestartet
        }
        else  //  Taste losgelassen
        { //Timer wird gestoppt.
          tasteDauer[port]=system.timer()-tasteDauer[port];
          //Jetzt wird eine entspr. Reaktion ausführt
          if      port==10   rollladenDG(tasteDauer[port]);
          else if port==11   luefter();
          else tastenreaktion(port,tasteDauer[port]);
        }
      }
    }
    for port= 16 ... 31 // Keller
    {
      x=1 shl port-16;
      if tasterAllChange2 and x
      // Wird beim Drücken und Loslassen ausgeführt !
      {
        if tasterAll2 and x //  Taste gedrückt
        {
          tasteDauer[port]=system.timer();//Timer wird gestartet
        }
        else  //  Taste losgelassen
        { //Timer wird gestoppt.
          tasteDauer[port]=system.timer()-tasteDauer[port];
          //Jetzt wird eine entspr. Reaktion ausführt
          if port==29   rollladenEG(tasteDauer[port]);
          else tastenreaktion(port,tasteDauer[port]);
        }
      }
    }
  }
}

Wie gesagt, der Thread wurde gleich zu Beginn gestartet. Früher hatte ich jedoch noch keine Abfrage
des Interrups, so dass ich die Eingänge ständig abfragen mu�te. Mitlerweile habe ich jedoch die
Eingänge so angeschlossen, dass ich erst auf einen Interrupt warte und dann reagiere. Das macht
die WAIT-Anweisung.
Heute habe ich mir jedoch überlegt, um die CControl II etwas zu entlasten, den Thread in eine Funktion
umzuwandeln, dann würden die ausbremsenden Thread-Verwaltungen reduziert.
Leider steht im Handbuch, das der WAIT-Befehl scheinbar nur für Threads gilt. Meine Frage daher:
Kann ich den WAIT-Befehl mit dem gleichen Effekt auch in einer Funktion einsetzen oder gibt es
hier eine andere Alternative?? In der LOOP-Schleife soll schlieÃ?lich immer nur gewartet werden, ob ein
Interrupt bei den Eingängen auftritt.
Danke,
GruÃ?, wema


    Antwort schreiben


Antworten:

Re: wait in Funktionen (von krassos - 18.05.2006 15:29)
    Re: wait in Funktionen (von wema - 18.05.2006 15:50)
        Re: wait in Funktionen (von André H. - 6.06.2006 9:02)