Parameterübergabe bei Funktionsaufruf - Array

Gast #1349710
Lesenswert?

Hallo, habe da ne kleine Frage:
Ich hab mit meinem Programm ein Problem:
Wenn ich eine Funktion in C schreibe, in der ich auf ein Array zugreife 
z.B:
1
void lcd_menu(uint8_t a, uint8_t b)
2
    {
3
        uint8_t y,x;
4
        char Puffer[15];
5
        set_cursor(0,b);
6
        strcpy_P(Puffer,menu[a]);
7
        lcd_string(Puffer);
8
              }
Habe ich das problem, damit bei der Parameterübergabe im Aufruf der 
Funktion (z.b:)


         void lcd_menu(2,3)

zwar meine Cursor-Position stimmt, jedoch mein Pointer (a) auf's Array 
irgendwie falsch? übergeben wird.

Wenn ich die uint8_t Variable innerhalb der Funktion deklariere
1
              uint8_t c;
2
              c=2; 
3
              strcpy_P(Puffer,menu[c]);
4
              lcd_string(Puffer);
wird auch der passende Zeilentext ausgegeben.
Bei menu[ ] handelt es sich um
Hat jemand einen Ratschlag? Was ich schon ausprobiert habe: die 
Variablendeklaration von a mit int, uint16_t, char - alles ohne Erfolg.
Gast #1349740
Lesenswert?

Ups, vergessen!

µ-Controller: ATmega32
1
const char variable0[]PROGMEM = "text";
2
const char variable1[]PROGMEM = "text";
3
const char variable2[]PROGMEM = "text";
4
const char variable3[]PROGMEM = "text";
5
const char variable4[]PROGMEM = "text";
6

7
PGM_P menu[6]PROGMEM=
8
  {
9
  variable0,
10
  variable1,
11
  variable2,
12
  variable3,
13
  variable4
14
  };
#1349809
Lesenswert?

Andreas schrieb:
> Ok, danke - das werd ich mal ausprobieren! Nur irgendwie find ichs
> komisch damit's trozdem ging, sobald ich die Variable x innerhalb der
> Funktion deklariert hatte!

Das hängt mit der Optimierung zusammen. Wenn der Wert von x bereits zur 
Compilier-Zeit feststeht, kann auch Menu[x] bereits beim Compilieren 
direkt ersetzt werden. Es wird dann gar nicht zur Laufzeit auf das Array 
zugegriffen und der Fehler tritt nicht in Erscheinung.

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