_delay_ms in mehreren c-Files - wo F_CPU definieren?

OP Persönliche Seite #3445020
Lesenswert?
• ▲
▼
Hallo zusammen,

die Frage hier dürfte der Mehrheit wohl eher ein Lächeln abgewinnen aber 
ich steige nicht ganz durch:

Einfaches Projekt
- main.c
- functions.c
- functions.h

die main.c sowie die functions.h rufen die _delay_ms() aus der 
<util/delay.h> auf.

Bisher habe ich immer in meiner main.c die F_CPU definiert für die delay 
funktion.

Nun wollte ich aber in der functions.c auch die _delay_ms benutzen. Hier 
wird mir dann der Fehler ausgegeben, die F_CPU sei nicht definiert.

Wo definiere ich denn die F_CPU, damit das ganze global bekannt ist?

Ich dachte sowas macht man dann in der functions.h, die in die main.c 
und die functions.c eingebunden wird. In dem Fall bekomme ich aber 
trotzdem eine missing definition error...?

Grüße
Alex
#3445029
Lesenswert?
• ▲
▼
@ Alex v. L. (bastel_alex) Benutzerseite

>Bisher habe ich immer in meiner main.c die F_CPU definiert für die delay
>funktion.

Pack es in eine main.h, welche überall per #inlcude eingebunden wird.

>Ich dachte sowas macht man dann in der functions.h, die in die main.c
>und die functions.c eingebunden wird. In dem Fall bekomme ich aber
>trotzdem eine missing definition error...?

Dann hast du möglicherweise die Reihenfolge der includes nicht beachtet.
#3445046
Lesenswert?
• ▲
▼
@ Fabian O. (xfr)

>Ist aber Murks,

Nö, das ist eine von mehreren Möglichkeiten.

>weil dann überall als erstes functions.h eingebunden
>werden muss, um die Delay-Funktionen nutzen zu können.

Wo ist das Problem? Bringt dich die EINE Zeile um? Ausserdem braucht man 
für die Delay-Funktionen so oder so das passende include!
#3445057
Lesenswert?
• ▲
▼
Falk Brunner schrieb:
> Wo ist das Problem? Bringt dich die EINE Zeile um?

Es ist eine unnötige Abhängigkeit mehr. Wenn ich den Code in einem 
anderen Projekt einbinden will, brauche ich da auch wieder eine 
"functions.h". Oder ich muss den Code kopieren und abändern. Damit habe 
ich zwei inkompatible Versionen, die ich pflegen muss. Außerdem muss die 
Reihenfolge der Inkludes stimmen, damit es funktioniert.
=> Unnötige Komplexität, unnötige Fehlerquelle => Murks.

> Ausserdem braucht man
> für die Delay-Funktionen so oder so das passende include!

Richtig, "delay.h". Aber nicht "functions.h".
#3445099
Lesenswert?
• ▲
▼
@ Fabian O. (xfr)

>Es ist eine unnötige Abhängigkeit mehr.

Bitte?

> Wenn ich den Code in einem
>anderen Projekt einbinden will, brauche ich da auch wieder eine
>"functions.h".

Das war nur ein Beispiel. Da F_CPU eine gloabe Funktion ist, würe ich 
sie eher in eine andere Headerdatei platzieren.

> Oder ich muss den Code kopieren und abändern.

Nö, der CODE ändert sich ein bisschen, BESTENFALLS die Zeile mit dem 
include. Packe ich die in jedem Projekt aber in main.h, nicht mal das.

> Damit habe
>ich zwei inkompatible Versionen, die ich pflegen muss. Außerdem muss die
>Reihenfolge der Inkludes stimmen, damit es funktioniert.

In einem C-Prgramm muss die Logik so oder so stimmen, damit es 
funktioniert.

>=> Unnötige Komplexität, unnötige Fehlerquelle => Murks.

;-)
Gast #3445126
Lesenswert?
• ▲
▼
> Das war nur ein Beispiel. Da F_CPU eine gloabe Funktion ist, würe ich
> sie eher in eine andere Headerdatei platzieren.

Naja, ich betrachte F_CPU eher als hardwareabhängige(!) Konstante und 
damit passt sie gut ins Makefile (gleich neben den CPU-Typen).

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.