Hallo, für die Ansteuerung meines aktuellen Projects über RS232 habe ich mir eine Struktur gebaut, die so aussieht: struct _cmd_tbl_entry { unsigned char *cmd; uint8_t (*proc)(void); }; Mit struct _cmd_tbl_entry cmd_tbl[] PROGMEM = { .... }; kann ich die Datenstruktur in das Flash ablegen. Das schluckt auch der avr-gcc (Version 4.0.1) noch. Aber wie kann ich die Strings in cmd in den Flash legen. PSTR hat keinen Erfolg gebracht ... Bisher mache ich es über RAM: struct _cmd_tbl_entry cmd_tbl[] = { {"set_speed", 0}, {"set_temp", 0}, {0, 0} }; Aber ich möchte das ganze ins Flash packen, weil der RAM ist ja sehr wertvoll und die ganzen Daten sind statisch. Ich weis: Anstelle der 0 sollte NULL stehen :) - cl
Genau :) Aber irgendwie müsste das doch gehen. Mit google findet man leider nicht allzuviel. Ich werde heute noch mal nen Workaround versuchen: Vielleicht hilft es, die Strings vorher zu deklarieren und dann mit den Adressen die Struktur zu füllen! Bemerkenswerterweise erwischt es den avr-gcc bei der Makroexpansion von PSTR. Da spuckt er Fehler aus. Ich probiere am besten auch gleich mal ne neue avr-libc aus. - cl
Also sowas funktioniert. Mit beiden avr-libc Versionen. Wenn mans außerhalb einer Funktion definiert, d.h. global dann krachts! void testit(void) { struct _xyz { prog_char *x; uint8_t i; }; struct _xyz x[] = { {PSTR("Hallo, World"), 2}, {PSTR("Blah"), 4} }; }
Ich kann Dir zwar keine Antwort auf Deine Frage geben, dafür aber einen - möglicherweise - hilfreichen Hinweis: Du solltest keine underscores am Anfang Deiner Namen verwenden, das ist durch den Standard den Entwicklern des Compilers bzw. dessen Standardbibliothek vorbehalten.
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.