Moin zusammen,
ich habe mal eine Idee für ein LCD Menü aus einem anderen Thread
aufgegriffen.
Das Problem ist in Codezeile 48. Hier Versuche ich den richtigen array
Eintrag über die variable gMenuPageIndex anzusprechen. Das funktioniert
aber nicht, auf dem Display erscheint dann Schwachsinn.
Wenn ich allerdings 0 (welches der richtig Index ist) anstatt der
variable dahin schreibe, funktioniert es. Mit einer über #define
definierten Konstanten geht es auch. Die variable hat an der Stelle
definitiv den Wert 0, daran liegt es also nicht.
1 | 11 #include <stdlib.h>
|
2 | 12 #include <avr/pgmspace.h>
|
3 | 13 #include "lcd.h"
|
4 | 14 #include "menu.h"
|
5 | 15
|
6 | 16 struct MenuPage_s {
|
7 | 17 const char *pText;
|
8 | 18 };
|
9 | 19
|
10 | 20 /*** global variable ***/
|
11 | 21 volatile uint8_t gMenuPageIndex = 0; /* The current page */
|
12 | 22 volatile uint8_t gMenuReturnPage = 0; /* The page in the calling menu for return */
|
13 | 23
|
14 | 24 /*** Menu strings ***/
|
15 | 25 const char MainString0[] PROGMEM = "Anzeigemodus";
|
16 | 26
|
17 | 27 /*** Menu entries ***/
|
18 | 28 const struct MenuPage_s Menu[] PROGMEM = {
|
19 | 29 {&MainString0[0]}
|
20 | 30 };
|
21 | 31
|
22 | 32 /*** functions ***/
|
23 |
|
24 |
|
25 | 42 void MenuPageDisplay(void)
|
26 | 43 {
|
27 | 44 char c;
|
28 | 45 char *addr ;
|
29 | 46 uint8_t loop_counter = 1;
|
30 | 47
|
31 | 48 addr = Menu[gMenuPageIndex].pText;
|
32 | 49
|
33 | 50 lcd_clrscr ();
|
34 | 51 while ( (c = pgm_read_byte(addr++)) != '\0') { /* read single bytes from flash and put on lcd, until string terminator \0 is found */
|
35 | 52 if (loop_counter++ == 8) lcd_gotoxy (0,1); /* change line after 8 chars, needed for 1x16 display */
|
36 | 53 lcd_putc (c);
|
37 | 54 }
|
38 | 55 }
|
Hat jemand eine Idee?
Achja, avr-gcc (GCC) 4.4.2 hat and em code nichts zu meckern.
Danke, Jan