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?
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.
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.
PGM_P muss GAR nciht extra definiert werden, denn die Definitionsteckt schon in den Headerfiles vom avr gcc. Muss man "nur" richtg anwenden. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.