Ich wundere mich gerade etwas über die Definition eines Arrays von
Strings, das komplett im Flash landen soll.
Laut GCC-Tutorial hier oder auch
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_rom_array wird
ein Array aus Strings im Flash ja immer zweistufig definiert: erst die
Strings einzeln und dann das Array.
1 | const char foo[] PROGMEM = "Foo";
|
2 | const char bar[] PROGMEM = "Bar";
|
3 |
|
4 | PGM_P array[2] PROGMEM = {
|
5 | foo,
|
6 | bar
|
7 | };
|
Jetzt habe ich es einfach so gemacht
1 | const char uartCmdTbl[][3] PROGMEM = { "P0", "P1", "P2", "DB"}
|
Und das landet auch komplett im Flash (laut .lss-File in Section .text).
Und der Zugriff ist über die _P Funktionen einfach mit z.B.
uartCmdTbl[3] möglich:
1 | char* tmp2[3];
|
2 | strcpy_P(tmp2, uartCmdTbl[3]);
|
Liegt das jetzt daran, dass alle Strings die gleiche definierte Länge
haben oder ist das doch irgendwie ganz anders und ich seh's nur nicht?
AVR-Studio 4.16 B628, WinAVR-20090313
Gruß
Fabian