Texte in const char * initialisieren und benutzen

Gast #3596248
Es geht um Konstanten im Programm-Speicher unter Atmel Studio 6.1, uC 
ist ein Atxmega.

Ich nutze zum Ausgeben von vordefinierten Texten auf eine UART 
normalweise eine Kontruktion wie

PGM_P text_eingabe="Eingabe : ";

wobei
#define PGM_P const char *
definiert ist.

Klappt prima, solange ich das direkt ins c-File schreibe und auch nur in 
diesem Modul benutze.

Ich möchte das aber gern in den Header schreiben und von überall da 
zugreifen, wo der Header eingebunden wird. Leider bekomme ich dann 
sofort Fehlermeldungen wie

Error  147  Disabling relaxation: it will not work with multiple 
definitions    1  1  USER_APPLICATION2

und

Error  146  first defined here  C:\Users\...\Debug\src\applic.o  1  1 
USER_APPLICATION2

Wie macht man es richtig?
Gast
PGM_P text_eingabe="Eingabe : "; in die .c
extern PGM_P text_eingabe; in die .h

Zuweisungen sollten immer in .c Dateien erfolgen und wenn sie in anderen 
Dateien nötig sind per extern darauf verweisen. Der Verweis kann in 
einer .h oder in der .c stehen.
Gast
Ich vermute, dass pgm_p mehrfach deklariert wird. Du darfst das nur 
einmal deklarierten. Am besten im Header. Im Header
1
#ifndef header_h
2
#define header_h
3
Blabla
4
#endif
Nicht vergessen.
Gast
Viel Dank, funktioniert nach Marcels Vorschlag perfekt.

Hatte übrigens PGM_P nicht selbst definiert sondern nur den Inhalt der 
pgmspace.c zur Erläuterung meines Problems zitiert.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.