Wie initialisiert man sowas korrekt?

Gast #4382232
Lesenswert?
• ▲
▼
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)?
Persönliche Seite #4382754
Lesenswert?
• ▲
▼
Okay, damit kann ich's nachvollziehen.  Wenn du nen PR anlegst dann 
bitte ohne Header, z.B.
1
const __flash char test1[] = "test";
2
const __flash char test2[] = "test";
3

4
char func (unsigned char c)
5
{
6
  return test1[c] + test2[c];
7
}
Die Warnung wird warscheinlich zu spät ausgegeben; sie zu früh 
auszugeben bringt hingegen PR34734 :-)  Bislang wurde das Problem 
wahrscheinlich durch PR57597 maskiert.

Bis das behoben ist kannst du ja -Wuninitialized deaktivieren oder 
rausfiltern falls "progmem memory area" drin vorkommt (ohne NLS, das man 
eh deaktivieren sollte).

Allerdings wüsste ich nicht, dass momentan jemand Zeit in avr-gcc 
investiert.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.