Ich habe das mit den Variablen mal geändert. Ich bekomme aber immernoch die Warnungen. Die gehen auch weg wenn ich als aufruf z.B. "main_cat[1][0]"
wähle. Aber dann funktioniert ja meine redraw Funktion nicht mehr, da dort ja alle Einträge von main_cat durchgegangen werden.
Code:
//Definitionen
#define HAUPT 0
#define SUB 1
uint8_t cursor = 0; //Zeilenposiition
uint8_t menu_pos = HAUPT; //Enthält die aktuelle Position im Menü (Haupt oder SUB)
uint8_t akt_cat = 0; //Wird für das SUB Menü benötigt, um die gewählt haupkategorie zu erkennen
char main_cat[4][16]; //Maximal 15zeichen lang
char sub_cat[4][4][28]; //Max 27 Zeichen
uint8_t status = 0; //Wenn 1, dann wird die while schleife unterbrochen
strcpy(main_cat[0], "---Hauptmenu---");
strcpy(main_cat[1], "Beep");
strcpy(main_cat[2], "Nix");
strcpy(main_cat[3], "Nix2");
strcpy(main_cat[4],"");
strcpy(sub_cat[1][0], "Zurueck");
strcpy(sub_cat[1][1], "Lang-kurz-Lang");
strcpy(sub_cat[1][2], "kurz-kurz-kurz");
strcpy(sub_cat[1][3], "kein Anschluss");
//Aufruf
redraw(&cursor, &akt_cat, &menu_pos, &main_cat, &status);
//Redraw
void redraw(uint8_t *_cursor, uint8_t *_akt_cat, uint8_t *_menu_pos, char *_main_cat, uint8_t *_status){
#define HAUPT 0
#define SUB 1
lcd_clrscr();
*_cursor=0;
*_akt_cat=0;
*_menu_pos=HAUPT;
for(uint8_t i=0; i<4; i++){
lcd_gotoxy(0,i);
lcd_puts(_main_cat[i]);
}
*_status=0;
}
Fehler:
Code:
main.c: In function 'showMenu':
main.c:286: warning: passing argument 4 of 'redraw' from incompatible pointer type
main.c:292: warning: passing argument 4 of 'redraw' from incompatible pointer type
main.c:298: warning: passing argument 4 of 'redraw' from incompatible pointer type
main.c:304: warning: passing argument 4 of 'redraw' from incompatible pointer type
main.c:307: warning: passing argument 4 of 'redraw' from incompatible pointer type
main.c:316: warning: passing argument 4 of 'redraw' from incompatible pointer type
main.c: In function 'redraw':
main.c:346: warning: passing argument 1 of 'lcd_puts' makes pointer from integer without a cast
Mit dem Code wird das Menü nichteinmal erneut angezeigt(Funktion redraw). In der Funktion habe ich ja auch nicht den gesamten Inhalt von main_cat. Wie kann ich das Problem lösen ohne globale Variablen zu verwenden?
MfG Jörn
EDIT:
Wohl die einfachste Lösung
Code:
if(redraw==1){
lcd_clrscr();
cursor=0;
akt_cat=0;
menu_pos=HAUPT;
for(uint8_t i=0; i<4; i++){
lcd_gotoxy(0,i);
lcd_puts(main_cat[i]);
}
status=0;
redraw=0;
}
Wo sonst redraw(....) aufgerufen wurde, wird einfach redraw auf 1 gesetzt und beim nächsten Schleifendurchlauf wird die if-Abfrage durchlaufen.
Ob es mit einer Pointerlösung auch geht interessiert mich trotzdem noch.
Lesezeichen