Forum: Mikrocontroller und Digitale Elektronik AtmelStudio 7 und #define F_CPU


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Harry (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ...

von Frickelfritze (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Christian S. (christian_s593)


Bewertung
0 lesenswert
nicht 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.

von Christian H. (netzwanze) Benutzerseite


Bewertung
0 lesenswert
nicht 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.

von Harry (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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 ...

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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.

von guest (Gast)


Bewertung
0 lesenswert
nicht 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.

von Harry (Gast)


Bewertung
0 lesenswert
nicht 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.

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.