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


von Flash-Heiner (Gast)


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





von Karl H. (kbuchegg)


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.

von Flash-Heiner (Gast)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.