Hallo, nach vielen Jahren µC Programmierung (8085, Z80, 8051 ...) habe ich mich jetzt entschlossen ATmega128 mit AtmelStudio 7 zu testen. Dabei bin ich auf folgendes Problem gestoßen: Wenn ich im Hauptprogramm mit #define F_CPU in der ersten Programm-Zeile die XTAL-Frequenz festlege, erhalte ich beim Compilieren einen Fehler (F_CPU nicht definiert) [BILD_1]. Wenn ich die XTAL-Frequenz in der 'Toolchain - AVR/GNU C Compiler - Symbols' festlege [BILD_2a] läuft der Compiler ohne Fehlermeldung durch [BILD_2b]. Kann man #define F_CPU im main-Programm nicht verwenden? Danke ...
Harry schrieb: > erhalte ich beim Compilieren einen Fehler > (F_CPU nicht definiert) [BILD_1]. Die inkludierten Header Files brauchen auch das Define F_CPU. Daher solltest du F_CPU in den Projekt-Defines definieren.
Ich hab zwar keine direkte Lösung dafür, aber kenne das Problem. Wenn inc_UART0.c kompiliert wird, ist F_CPU dem Compiler nicht bekannt. Ich habe eigentlich immer ein "define.h" Datei, worin F_CPU etc. definiert sind, die dann in den jeweiligen *.c Dateien eingebunden wird. Warum F_CPU nicht im Scope ist, wenn es direkt zu Beginn in main definiert wird, kann bestimmt jemand erklären, der sich besser mit dem Linker auskennt.
Eigentlich sollte es in einer Header-Datei nicht nötig sein, F_CPU zu definieren, wenn es bereits im C-File definiert wurde. #include bindet ja lediglich die Header-Datei an diese Stelle ein und das C-File wird dann im kompletten übersetzt. Sollte der Compiler aber auf die Idee kommen, eine Header-Datei zu übersetzen, könnte es zu diesem Fehler kommen.
Christian S. schrieb: > Ich habe eigentlich immer ein "define.h" Datei, worin F_CPU etc. > definiert sind, die dann in den jeweiligen *.c Dateien eingebunden wird. Danke, an so eine Lösung habe ich auch schon gedacht aber im Moment sträube ich mich noch etwas dagegen. Mal sehen ...
Frickelfritze schrieb: > Die inkludierten Header Files brauchen auch das Define F_CPU. Nö, das brauchen sie nicht, wenn es vor dem #include schon definiert ist. Das Problem liegt woanders. Einen Hinweis gibt möglicherweise die IDE, die aus irgendwelchen Gründen im ersten Bild F_CPU kursiv ausgibt, aber nicht das "#define" davor und auch nicht den Wert dahinter. In der nächsten Zeile, in der BAUD_UART0 definiert wird, ist aber trotz gleichem Aufbaus nichts kursiv geschrieben. Am Rande bemerkt: Unter "MyIncludes" rechts im Projektbaum taucht eine *.c-Datei auf. Das ist ein Fehler; *.c-Dateien werden nicht per #include ins Programm eingebunden, und sie haben in einer Projektverwaltung auch nichts dort verloren, wo Include-Dateien (bzw. Headerdateien) aufgelistet werden.
Rufus Τ. F. schrieb: > Nö, das brauchen sie nicht, wenn es vor dem #include schon definiert > ist. Ist es aber nur beim Übersetzen der main.c nicht aber beim Übersetzen der inc_UART0.c Rufus Τ. F. schrieb: > Einen Hinweis gibt möglicherweise die IDE, die aus irgendwelchen Gründen > im ersten Bild F_CPU kursiv ausgibt, aber nicht das "#define" davor > und auch nicht den Wert dahinter. Das liegt wohl eher daran, daß dem zur Syntaxhervorhebung verwendeten Plugin dieses Makro bekannt ist. Rufus Τ. F. schrieb: > Das > ist ein Fehler; *.c-Dateien werden nicht per #include ins Programm > eingebunden, ... Tut er ja auch nicht, auch wenn der Name mit 'inc_' anfängt. Die erste Zeile der Fehlerliste zeigt, daß das Ding einzeln compiliert wird. Und da F_CPU weder in dieser Datei noch den von ihr includierten Header noch global in den Projekteinstellungen definiert ist schmeißt der Comiler halt entsprechende Fehlermeldungen. Ansonsten hast Du natürlich Recht, der Name (mit dem inc_ am Anfag) und das Verzeichnis ('MyIncludes') ist einfach nur daneben.
Rufus Τ. F. schrieb: > Das Problem liegt woanders. > > Einen Hinweis gibt möglicherweise die IDE, die aus irgendwelchen Gründen > im ersten Bild F_CPU kursiv ausgibt, aber nicht das "#define" davor > und auch nicht den Wert dahinter. > > In der nächsten Zeile, in der BAUD_UART0 definiert wird, ist aber trotz > gleichem Aufbaus nichts kursiv geschrieben. Das F_CPU kursiv und andere nicht ist mir auch schon aufgefallen. Ich habe aber bisher keine Erklärung dafür gefunden.
guest schrieb: > Tut er ja auch nicht, auch wenn der Name mit 'inc_' anfängt. Die erste > Zeile der Fehlerliste zeigt, daß das Ding einzeln compiliert wird. Das ist gut versteckt, aber von Dir gut entdeckt.
Beitrag #5308500 wurde von einem Moderator gelöscht.
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.