_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

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