
| wait in Funktionen Kategorie: Programmierung (von wema - 18.05.2006 12:58) | ||
| ||
|
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: | ||