#define F_CPU was ist richtig und was ist falsch?

OP #1909228
Lesenswert?
• ▲
▼
Hallo,

ich bin gerade dabei mich mit der util/delay.h einzuarbeiten.

Jetzt habe ich schon eine ganze Menge über das Einstellen der 
Taktfrequenz gelesen aber etwas ist mir immer noch nicht ganz klar. Ich 
hoffe hier kann mir jemand den Sachverhalt mal eindeutig erklären.

Wo bitte definiere ich den nun die Taktfrequenz für die Benutzung der 
Funktion: void delay_ms?

Die Fusebits habe ich gesetzt auf die von mir gewünschte Taktfrequenz.
Im AVR Studio, unter Project --> Configuration Options ist Optimization 
-Os eingestellt. Muss ich auch hier die Taktfrequenz in Hz eintragen?

Ist die Definition im .C File mit #define F_CPU nur eine Konstant mit 
der im Programm gerechnet wird und hat keine Auswirkung auf die 
Tasächliche Hardware Taktrate?
Den wenn diese #define nicht vorhanden ist, bekomme ich lediglich eine 
Wahrnung.Das Programm wird übersetzt und abgearbeitet.

Desweiteren habe ich in einem Beitrag gelesen:"Du solltest das 
definieren von F_CPU in der Reihenfolge der 3
Möglichkeiten sehen: Options Dialog ist am besten (wenn die IDE das
Makefile erzeugt), Makefile ist zweite Wahl, direktes Einfügen will man
vermeiden."

Heißt das das ich die Taktfrequenz im Makefile definieren kann und 
dadurch die Definition im .c File überflüssig macht?

Wie würde so etwas den aussehen? Bin noch Anfänger und möchte mir nicht 
gleich irgend etwas abschießen!

Was bitte ist den nun richtig und was falsch?

Gruss,
Andreas
Gast #1909261
Lesenswert?
• ▲
▼
> Wo bitte definiere ich den nun die Taktfrequenz für die Benutzung der
> Funktion: void delay_ms?

Irgendwo vorm einbinden des zugehörigen Headers. Vorzugsweise an ∗einer∗ 
zentralen Stelle.

> Ist die Definition im .C File mit #define F_CPU nur eine Konstant mit
> der im Programm gerechnet wird und hat keine Auswirkung auf die
> Tasächliche Hardware Taktrate?

Ja (Ergänzung für Pedanten: Nein, im Programm wird i.d.R. nicht mehr mit 
der Konstante^W^Wdem define F_CPU gerechnet, das haben Präprozessor 
(F_CPU substituieren) und Compiler (rumrechnen/optimieren) schon 
erledigt).

> Heißt das das ich die Taktfrequenz im Makefile definieren kann und
> dadurch die Definition im .c File überflüssig macht?

Ja. Wäre auch meine bevorzugte Wahl. Angaben in der GUI stehen in meinen 
Augen an allerletzter Stelle. andererleuteMMV.

> Wie würde so etwas den aussehen? Bin noch Anfänger und möchte mir nicht
> gleich irgend etwas abschießen!
1
# richtig langsamer externer Beispieltakt
2
F_CPU = 123
3

4
# hier bauen wir die Parameter für den gcc zusammen
5
CFLAGS += -DF_CPU=$(F_CPU)UL
6

7
# irgendwo hier wird dann irgendwann mal der gcc gerufen - mit CFLAGS versteht sich
8
..

HTH

g457
selbst ein Pedant
Gast #1909293
Lesenswert?
• ▲
▼
Da [1] gibts ein seehr ausführliches und gut annotiertes 
Beispielmakefile. Falls Du noch Infos zum Makefile allgemein suchst: In 
der Wikipedia gibts einen hübschen Artikel dazu [2], noch etwas länger 
in der englischen Version [3]. Und eine richtig ausführliche Doku gibbet 
in der Referenz [4] vom make :-)

HF

[1] http://www.mikrocontroller.net/articles/Beispiel_Makefile
[2] http://de.wikipedia.org/wiki/Makefile
[3] http://en.wikipedia.org/wiki/Makefile
[4] http://www.gnu.org/software/make/manual/make.html

Antwort schreiben

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.

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.