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: 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) |