Forum: Mikrocontroller und Digitale Elektronik Hilfe! pgm_read_byte() in externem c-file funktioniert nicht


von V. B. (dr-robotnik)


Lesenswert?

Hallo zusammen!

Ich mache in meiner main.c einen Eintrag im Programmspeicher mit:

const uint8_t lut[32] PROGMEM = {, , };

und einen Zeiger auf die Elemente des Arrays:

uint8_t lut_ptr = 0;


darauf greife ich innerhalb verschiedener Funktionen zu, z.B.:

void init(void)
{
  lut_ptr = 0;
  spi_out(pgm_read_byte(&lut[lut_ptr]));
}

wenn diese (und andere Funktionen, die pgm_read_byte(&lut[lut_ptr])) 
verwenden) ebenfalls in der main.c deklariert sind, funktioniert alles 
einwandfrei. Wenn ich diese Funtionen jedoch in eine externe c-datei 
auslagere um die main.c aufzuräumen bekomme ich beim compilieren die 
Fehlermeldung

error: 'lut' undeclared (first use in this function)
auch bringt es nichts

const uint8_t lut[32] PROGMEM = {, , };

ebenfalls in die externe c-file auszulagern.

Kann mir jemand helfen? Was mache ich falsch?

Vielen Dank und viele Grüße!

von Karl H. (kbuchegg)


Lesenswert?

http://www.mikrocontroller.net/articles/FAQ#Globale_Variablen_.C3.BCber_mehrere_Dateien

beachte auch den Teil über Initialisierungen (ist ein wenig im Text 
versteckt)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> und einen Zeiger auf die Elemente des Arrays:
> uint8_t lut_ptr = 0;

Der Begriff Zeiger und die Benennung der Variablen lut_ptr sind auf den 
ersten Blick missverständlich, weil die mit einem Pointer verwechselt 
werden können. Ich würde das eher als Index oder Zähler bezeichnen.

uint8_t lut_index = 0;

von V. B. (dr-robotnik)


Lesenswert?

Alles klar!
Vielen Dank euch beiden!

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.