www.mikrocontroller.net

Forum: Compiler & IDEs Problem progmem in Funktionen


Autor: Daniel Held (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

int main()
{
   while(1)
   {
   testvar = pgm_read_word(&(((datapoint_t *)pgm_read_word(&(FAN[1].kf_ptr)[0].kl_ptr))[0].Speed)); //funktioniert

   testvar1 = get_speed(1, 0, 0); //funktioniert nicht
   }
}

int get_speed(int fan_index, int kl_index, int point_index)
{
return pgm_read_word(&(((datapoint_t *)pgm_read_word(&(FAN[fan_index].kf_ptr)[kl_index].kl_ptr))[point_index].Speed));
}


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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Held (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.