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.
Fehler: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; }
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?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
MfG Jörn
EDIT:
Wohl die einfachste Lösung
Wo sonst redraw(....) aufgerufen wurde, wird einfach redraw auf 1 gesetzt und beim nächsten Schleifendurchlauf wird die if-Abfrage durchlaufen.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; }
Ob es mit einer Pointerlösung auch geht interessiert mich trotzdem noch.







Zitieren

Lesezeichen