Ich habe zwei Zeichenketten im Flash, die zufällig identisch sind. Lässt
sich nicht vermeiden (hat mit verschiedenen Sprachen zu tun). Ich habe
das Ganze mal zu einem Minimalbeispiel zusammengedampft, das nur das
Wesentliche enthält:
1 | #include <inttypes.h>
|
2 | #include <avr/io.h>
|
3 |
|
4 | const __flash char TEST1[] = "test";
|
5 | const __flash char TEST2[] = "test";
|
6 |
|
7 | static void use(const __flash char *data) {
|
8 | char c;
|
9 | while ((c = *data++) != '\0') GPIOR1 = c;
|
10 | }
|
11 |
|
12 | int __attribute__((OS_main)) main(void) {
|
13 | use(TEST1);
|
14 | use(TEST2);
|
15 | while (1);
|
16 | }
|
Kompiliert wird das Ganze mit avr-gcc 5.2.1 mit u.a. dem Parameter
-fmerge-all-constants, der in solchen Fällen Platz spart. Nun ist es so,
dass folgende Warnung erscheint:
1 | test.c: In function 'main':
|
2 | test.c:5:20: warning: uninitialized variable 'TEST2' put into program memory area [-Wuninitialized]
|
3 | const __flash char TEST2[] = "test";
|
Warum passiert das? Und wie kann ich die Warnung verhindern (ich kann
nicht auf -Wuninitialized oder -fmerge-all-constants verzichten)?