AVR GCC Textausgabe von Flash-Strings

OP #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???
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.