Siro
19.10.2011, 15:38
Hallo zusammen,
ich habe eine Filterfunktion geschrieben, welche eigentlich nur lokale Variablen benötigt.
Da diese jedoch nur innerhalb der Funktions aktualisiert werden, habe ich sie in der Funktion selbst, also lokal und statisch definiert.
Im Prinzip sind das ja globale Variablen, welche der Compiler jedoch nur innerhalb der Funktion kennt.
Soweit alles klar.
Was passiert wenn ich diese nun noch initialisiere, bzw. muss ich die überhaupt initialisieren, wenn sie zum Programmstart 0 sein sollen ?.
Oder: Wann bzw. Wie werden statisch lokale Variablen initialisiert ? Eigentlich falsch ausgedrückt,ab wann haben die Initialwerte ihre Gültigkeit ?
zum Verständnis der Code:
S32 Filter(S32 value)
{ const S32 d = 206 ; /* LowPassFilter Fc=0.5 Hz at 1000 Hz Samplerate */
static S32 n = 0; /* initialwert setzen ???? erforderlich ???? */
static S32 rest = 0; /* initialwert setzen ???? erforderlich ???? */
static S32 x;
value = value - n;
x = value * d;
rest = (x + rest) % 65536;
x = (x + rest) / 65536;
n = n + x;
return n;
}
Die Funktion ist soweit einwandfrei wie Ihr der Grafik entnehmen könnt.
ich danke Euch für hilfreiche Infos
Siro
ich habe eine Filterfunktion geschrieben, welche eigentlich nur lokale Variablen benötigt.
Da diese jedoch nur innerhalb der Funktions aktualisiert werden, habe ich sie in der Funktion selbst, also lokal und statisch definiert.
Im Prinzip sind das ja globale Variablen, welche der Compiler jedoch nur innerhalb der Funktion kennt.
Soweit alles klar.
Was passiert wenn ich diese nun noch initialisiere, bzw. muss ich die überhaupt initialisieren, wenn sie zum Programmstart 0 sein sollen ?.
Oder: Wann bzw. Wie werden statisch lokale Variablen initialisiert ? Eigentlich falsch ausgedrückt,ab wann haben die Initialwerte ihre Gültigkeit ?
zum Verständnis der Code:
S32 Filter(S32 value)
{ const S32 d = 206 ; /* LowPassFilter Fc=0.5 Hz at 1000 Hz Samplerate */
static S32 n = 0; /* initialwert setzen ???? erforderlich ???? */
static S32 rest = 0; /* initialwert setzen ???? erforderlich ???? */
static S32 x;
value = value - n;
x = value * d;
rest = (x + rest) % 65536;
x = (x + rest) / 65536;
n = n + x;
return n;
}
Die Funktion ist soweit einwandfrei wie Ihr der Grafik entnehmen könnt.
ich danke Euch für hilfreiche Infos
Siro