Funktionen Kategorie: Programmierung (von ChristianS - 30.10.2009 12:15) | ||
| ||
Hallo, ich kann mir folgendes Phänomen nicht erklären, vielleicht kann mir jemand auf die Sprünge helfen: function Ir () returns int /******************************************************************************/ /* Auswertung der Lichtschranke */ /******************************************************************************/ { long t; t=timeout[0]; //von int nach long konvertieren t=t*1000; if ports.get(ir) and ir_busy==0 //warten auf seigende Flanke { ir_busy=1; //Ir() hat High-Pegel ir_on=system.timer(); //Zeitpunkt der steigenden Flanke //hwcom.print(" IR steigende Flanke"); //hwcom.ret(); reset timer0; //Timer nachtriggern t_start[0]=1; //Startflag für timer setzen } if not ports.get(ir) and ir_busy //warten auf fallende Flanke { ir_busy=0; //Ir() wieder Low //hwcom.print("IR fallende Flanke"); //hwcom.ret(); } if ir_busy if system.timer()-ir_on > t //auf timeout prüfen return 2; //FehlerCode zurückgeben return ir_busy; //Status zurückgeben: } //0:= Ruhezustand //1:= High-Signal /******************************************************************************/ 1. Frage: warum kann ich die Variable ir_on nicht lokal in der Funktion definieren? Wenn ich das tue, dann funktioniert der timeout nicht und ir_on nimmt in der steigenden und fallen Flanke unter- schiedliche Werte an. Delfiniere ich ir_on global, sind beide Werte identisch und der Timeout funzt. 2. Frage: timeout[0] ist eine Konstante. Wieso funktioniert die Zeile if system.timer()-ir_on>(timeout[0]*1000) nicht? Ich muss den Umweg über die Variable" t" machen. Das verstehe ich auch nicht so ganz. Vielen Dank, ChristianS. | ||
Antwort schreiben Antworten: Re: Funktionen (von Heiko - 30.10.2009 20:02) |