Forum: Compiler & IDEs Problem progmem in Funktionen


von Daniel Held (Gast)


Lesenswert?

Hallo,
Ich programmiere gerade eine Funktion, die mir aus großen Datenfeldern 
im Flash Daten auslesen soll.
Wenn ich die Daten innerhalb der main-Schleife auslese funktioniert es 
perfekt. Da aber die Aufrufe mehrfach gebraucht werden wollte ich alles 
in eine Funktion packen (auch im main.c) und den ausgelesenen Wert mit 
dem return rückgeben und da liegt das Problem..
main.c
1
int main()
2
{
3
   while(1)
4
   {
5
   testvar = pgm_read_word(&(((datapoint_t *)pgm_read_word(&(FAN[1].kf_ptr)[0].kl_ptr))[0].Speed)); //funktioniert
6
7
   testvar1 = get_speed(1, 0, 0); //funktioniert nicht
8
   }
9
}
10
11
int get_speed(int fan_index, int kl_index, int point_index)
12
{
13
return pgm_read_word(&(((datapoint_t *)pgm_read_word(&(FAN[fan_index].kf_ptr)[kl_index].kl_ptr))[point_index].Speed));
14
}

Hat jemand eine Idee was da los ist?? Die Funktion liefert nur Stuss 
zurück.
Basis ist im Moment ein ATMega8.

Danke schon mal..

mfg Daniel Held

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Lös mal den Bandwurm auf mit Zwischenwerten vom richtigen (Pointer)typ.

Damit ist es
1) besser zu verstehen (auch für dich)
2) gcc kann warnen wenn was mit den Zeiger-Typen verhundst wird.

von Daniel Held (Gast)


Lesenswert?

OK, ich habs mal aussortiert und nun funktioniert es.
Allerdings verstehe ich nicht warum, da im Ursprung beide Ausdrücke 
gleich sind, einziger Unterschied einmal nur in der main-Schleife das 
ander Mal in einer Funktion.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.