mikrocontroller.net

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


Autor: Andreas V. (wicky)
Datum:

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

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!
# richtig langsamer externer Beispieltakt
F_CPU = 123

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

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

HTH

g457
selbst ein Pedant

Autor: Andreas V. (wicky)
Datum:

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

Autor: g457 (Gast)
Datum:

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

Autor: Andreas V. (wicky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!!!

Schönes rest WE!

Andreas

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.