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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.