AtmelStudio 7 und #define F_CPU

Gast #5308035
Lesenswert?

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 ...
Angehängte Dateien:
#5308058
Lesenswert?

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.
Persönliche Seite #5308067
Lesenswert?

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.
Persönliche Seite #5308073
Lesenswert?

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.
Gast #5308121
Lesenswert?

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.
Gast #5308193
Lesenswert?

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.
Beitrag #5308500 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren