Ich hab da ein kleines Verständnisproblem, evtl. kann mir da jemand
weiter helfen:
Es gibt eine Funktion text_p(), die gibt einen String aus dem Flash auf
einem Display aus, das funktioniert und frisst auch kein RAM.
Wenn ich aber text_p() in einer Funktion aufrufe, die den Pointer auf
den Text als Parameter übergibt, kommt nur nonsens raus.
Wo ist mein Denkfehler?
da wird doch nur eine Adresse, die ins Flash zeigt, weitergereicht
und wie kann man das lösen?
eine Version ohne _p also mit strings aus dem RAM, funktioniert. Aber
ich habe da ca. 2kB Texte und nur 4kB RAM.
Umgebung: AtmelStudio7, GCC V5.4.0, AT90CAN128
hier das codeschnipsel:
1 | void text_p(int x, int y, int attr,const char *str)
|
2 | {
|
3 | EAK_set_cursor(x,y);
|
4 | EAK_set_attr(attr);
|
5 | while(pgm_read_byte(str) != 0x00){
|
6 | EAK_putc(pgm_read_byte(str++));
|
7 | }
|
8 | }
|
9 |
|
10 |
|
11 | text_p(3,5,COLOR_STD,"my text");
|
12 | -> das funktioniert
|
13 |
|
14 | -----------------------------------------------------
|
15 | void initpage_p(const char *headline)
|
16 | {
|
17 | clear_screen();
|
18 | ...
|
19 | if(LogoTxt!=NULL){
|
20 | text_p(0,0,COLOR_STD,headline);
|
21 | }
|
22 | ...
|
23 | }
|
24 |
|
25 | initpage_p("**headline**");
|
26 |
|
27 | -> in der kopfzeile steht dann nur Mist???
|