Forum: Mikrocontroller und Digitale Elektronik #define F_CPU was ist richtig und was ist falsch?


von Andreas V. (wicky)


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

von g457 (Gast)


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

von Andreas V. (wicky)


Lesenswert?

g457 schrieb:
> # irgendwo hier wird dann irgendwann mal der gcc gerufen - mit CFLAGS versteht 
sich
> ..


Kannst Du mir das bitte noch mal vollständig auskommentieren bzw. 
aufzeigen? Stehe glaub ich gerade auf dem Schlauch.

Vielen Dank auf jeden Fall für deine Hilfe.

von g457 (Gast)


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

von Andreas V. (wicky)


Lesenswert?

Vielen Dank!!!

Schönes rest WE!

Andreas

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
Noch kein Account? Hier anmelden.