Fehler bei mehrfachem Funktionsaufruf

OP #1034570
Lesenswert?

Hallo zusammen,

ich verzweifel grad an einem einfachen Codeschnipsel (Anhang)!

Problem: Wenn ich die Funktion "F_Verzoegerung(x,y)" nur ein mal aufrufe 
funktioniert das Programm wie erwartet, d.h. es wird die korrekte 
Verzögerungszeit ermittelt.

Rufe ich die Funktion F_Verzoegerung(x,y) jedoch ein zweites mal auf, 
(Freigabe_2=F_Verzoegerung(Sekundentakt,10);) kommt es zur ungewollten 
Verkürzung der Verzögerungszeit des 1. Aufrufes und dies obwohl alle 
Variablen als static deklariert sind.

Kann mich jemand auf den Weg der Erleuchtung führen, Besten Dank!

Grüße je
Angehängte Dateien:
Gast #1034579
Lesenswert?

Ich würde sagen es liegt daran das du der Variable Sekundentakt vor dem 
Eintritt in die while Schleife keinen Wert zuweist, in der wihile 
Schleife machst du das jedoch. Das musst du ändern denke ich
Moderator (Firma: Titel) Persönliche Seite #1034618
Lesenswert?

Das ist ja fast wie ein Kapierschutz (kein Schreibfehler!!) wenn eine 
Variable "First_Run" heißt, in Wahrheit aber das Gegenteil meint. Also 
eher sowas wie "Second_Run_And_Each_Run_After" ;-)

Zudem wird "Freigabe" nie zurückgesetzt. Genausowenig wie das ominöse 
"First_Run". Solltest du nach Ablauf deiner Zeit 
"Einschalt_Verzoegerung" nicht diese beiden Werte auch neu 
initialisieren?
OP #1034780
Lesenswert?

Danke für die Hinweise, dies ist es aber alles nicht, das Programm 
verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen 
lokalen Variablen wie beim 1. Aufruf zugreift (sollten baer beide mit 
einem getrennten Set an lokalen Variablen arbeiten) - kann so was an 
Compilereinstellungen liegen???

Gruß je
#1034786
Lesenswert?

Jens R. wrote:
> das Programm
> verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen
> lokalen Variablen wie beim 1. Aufruf zugreift

Natürlich tut sie das, du hast die Variablen ja schließlich als static 
deklariert. Vielleicht solltest du noch mal nachlesen, was static für 
lokale Variablen bedeutet.
OP #1034790
Lesenswert?

Hi Stefan,

static
Die Variable ist im Block gültig bzw. im Quell-Modul (also in der 
C-Datei, in der die angelegt wurde), wenn sie nicht innerhalb eines 
Blockes angelegt wurde. Statische Variablen werden nicht in Registern 
oder im Frame der Funktion angelegt, sondern im selben Speicherbereich, 
in dem auch die globalen Variablen liegen; Konstanten evtl. auch im 
Flash. Eine lokale Variable, die als static angelegt wird, "überlebt" 
also das Verlassen des Blocks und hat beim neuerlichen Betreten des 
Blockes ihren bisherigen Wert. In unterschiedlichen Blöcken angelegte 
lokale statische Variablen beziehen sich auf unterschiedliche 
Speicherstellen, genau wie bei lokalen Variablen auch.

bin schon seit 2 Tagen am "Suchen" - als was müssen die Variable dann 
deklariert werden, ihr Inhalt soll für erhalten bleiben bis zum nächsten 
Schleifendurchlauf, der 2. Aufruf der Funktion in der gleichen Schleife 
soll aber mit anderen Werten arbeiten?

eine Idee?

lg je

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren