AVR GCC Textausgabe von Flash-Strings

#6966510
Lesenswert?

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???
#6966534
Lesenswert?

du hast vollkommen Recht, das muss natürlich PSTR("text") heißen.
hab den Code einfach schnell hingetippt.
Aber das war auch der Fehler im Programm:
bei den initpage_p Aufrufen war auch kein PSTR davor.
text_p wird ansonsten über ein Macro aufgerufen
1
#define TEXT_P(x,y,attr,string) (text_p(x,y,attr,PSTR(string)))

jetzt funktionierts!
Danke!

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