mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Strings aus Flash lesen und ausgeben, mega64 + CodeVision


Autor: Flash-Heiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe im Flashspeicher(mega64 + CodeVision) Strings abgelegt, z.B.:

// Deklaration und Initialisierung des Strings
flash char *Di1 = "COptions";


Mit printf möchte ich diese Daten lesen und über RS232 ausgeben, z.B.:

// Deklaration der Funktion
void touch_define(char x1,char y1, char x2, char y2, char dc , char uc , 
char flash *str)

// Definition der Funktion
void touch_define(char x1,char y1, char x2, char y2, char dc , char uc , 
char flash *str)
{
printf("%c%c%c%c%c%c%c%c%c%s%c", ESC,'A','T',x1,y1,x2,y2,dc,uc,str,0);
}

// Funktionsaufruf
touch_define(127,107,182,127,253,0,Di1);  // Options

Leider wird der String 'Di1' nicht übertragen.

Gibt es da eine Erklärung für?  Vielen Dank!

Heiner





Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einem AVR wird vom Flash anders gelesen als vom normalen
SRAM.
Wenn du den Pointer auf den String an printf übergibst, hat
printf keine Möglichkeit mehr festzustellen, ob dieser
Pointer ins Flash oder ins SRAM zeigt. Dein printf geht
wohl davon aus, dass ein mittels %s angekündigter Pointer
ein Pointer ins SRAM ist.

Durchforste mal deine Compiler Doku. Ev. gibt es für
Flash-Pointer ein anderes Formatierzeichen als %s.
Ansonsten bleibt dir nur der Weg, den String zunächst
vom Flash ins SRAM zu kopieren und die Ausgabe dann von
dort zu machen.

Autor: Flash-Heiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl heinz,

vielen Dank für deinen Tipp! Das war mal wieder ein Volltreffer.

Statt %s gilt das %p.  Jetzt klappt es.


Vielen Dank!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.