#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

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