Hallo,
ich möchte hier mal einen Codeschnipsel posten, der vielleicht ganz
hilfreich sein könnte (oder aber evtl. auch völlig trivial ist).
Jedenfalls brauchte ich eine Routine, die Strings aus dem Flash für
"Einmalnutzung" so herausliest, dass man sie wie ganz normale Strings
verwenden kann. In meinen Fall brauchte ich das, um diese Strings einer
bereits vorhandenen Print-Routine zu übergeben.
Die mit getSwiftFlashStr gelesenen Strings können so lang sein wie
swiftFlashStrBuf Platz bietet, und sind so lange gültig, bis man den
nächsten String liest:
1 | #include <string.h>
|
2 | #include <avr/pgmspace.h>
|
3 |
|
4 | char swiftFlashStrBuf [21];
|
5 |
|
6 | char* getSwiftFlashStr (PGM_P flashStr) __ATTR_CONST__;
|
7 | char* getSwiftFlashStr (PGM_P flashStr)
|
8 | {
|
9 | size_t len = strlen_P (flashStr);
|
10 |
|
11 | if (len > sizeof (swiftFlashStrBuf) - 1)
|
12 | {
|
13 | len = sizeof (swiftFlashStrBuf) - 1;
|
14 | }
|
15 |
|
16 | memcpy_P (swiftFlashStrBuf, flashStr, len);
|
17 | swiftFlashStrBuf [len] = 0;
|
18 |
|
19 | return swiftFlashStrBuf;
|
20 | }
|
21 |
|
22 | extern void consolePrintln (char* s);
|
23 | consolePrintln (getSwiftFlashStr (PSTR ("Hallo Welt")));
|
ich hoffe, dass das jemand gebrauchen kann.
Grüße Ralf