Forum: Mikrocontroller und Digitale Elektronik defines verständnisfrage FCPU Warning


von Yvonne J. (laserlight)


Lesenswert?

Hallo,

ich habe immer folgendes Warning:

c:/programme/winavr-20070525/bin/../avr/include/util/delay.h:84:3: 
warning: #warning "F_CPU not defined for <util/delay.h>"

nun habe ich in meinem Main schon extra diese Reienfolge angebracht:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <stdlib.h>
#define F_CPU 8000000
#include <util/delay.h>

wie bekomme ich das in den griff, das das richitg ineinander fasst? 
makefile?

Gruß,
Yve

von Karl H. (kbuchegg)


Lesenswert?

Deine Reihenfolge ist dergestalt, dass sie diese Warnung nicht erzeugen 
sollte.
Bist du sicher, dass du auch die richtige Datei compilierst?

von Thi L. (flothi)


Lesenswert?

Yvonne J. schrieb:
> wie bekomme ich das in den griff, das das richitg ineinander fasst?
> makefile?

Japp - ist die sinnvollere Variante

> Gruß,
> Yve

Florian

von Yvonne J. (laserlight)


Lesenswert?

...ich binde sie direkt im main ein, und dann nutze ich sie auch noch in 
einer anderen Datei...

es kann doch aber nicht sein, das ich in jeder c Datei in der ich delay 
nutzen will, wieder FCPU definieren muss, das ist doch nicht richtig?

Yve

von Karl H. (kbuchegg)


Lesenswert?

Yvonne J. schrieb:

> es kann doch aber nicht sein, das ich in jeder c Datei in der ich delay
> nutzen will, wieder FCPU definieren muss, das ist doch nicht richtig?

Doch das ist richtig.

Jedes C-File wird unabhängig von allen anderen compiliert. Daher muss in 
jedem C-File alles enthalten sein, was für dieses C-File relevant ist. 
Was in a.c drinnen steht, interessiert den Compiler nicht, wenn er b.c 
compiliert.

In welcher Form du jedem C-File eine Definition für F_CPU zur Verfügung 
stellst, ist allerdings eine ganz andere Geschichte.

von Yvonne J. (laserlight)


Lesenswert?

...globales define?

von Yvonne J. (laserlight)


Lesenswert?

...eines verstehe ich dann noch nicht so ganz:

wenn ich soetwas in meinem header verbastel:

#ifndef LTC2723WC_H
#define LTC2723WC_H


fdgdfg


#endif

um Ihn gegen mehrfaches einbinden zu (schützen) dann ist das define 
(Flag) auch gültig wenn ich diesen Header an anderen Stellen wieder 
einbinde - das passt für mich nicht zusammen...

yve

von Thi L. (flothi)


Lesenswert?

Oder mit dem von dir bereits angesprochenen makefile - das ist dann dein 
"globales define".

vg

von Karl H. (kbuchegg)


Lesenswert?

Yvonne J. schrieb:

> wenn ich soetwas in meinem header verbastel:
>
> #ifndef LTC2723WC_H
> #define LTC2723WC_H
>
>
> fdgdfg
>
>
> #endif
>
> um Ihn gegen mehrfaches einbinden zu (schützen) dann ist das define
> (Flag) auch gültig wenn ich diesen Header an anderen Stellen wieder
> einbinde

in derselben C-Datei

Der include Guard schützt dich vor solchen Dingen

main.c
******
1
#include "LTC2723WC.h"
2
#include "LTC2723WC.h"

Natürlich wird das niemand so schreiben. Trotzdem kann der Fall 
auftreten, dass ein Header File mehrmals inkludiert wird, wenn der 2.te 
include indirekt erfolgt: Ein a.h includiert ein b.h welches ein 
LTC2723WC.h inkludiert.
Schreibst du dann
1
#include "LTC2723WC.h"
2
#include "a.h"

Dann würde LTC2723WC.h 2 mal includiert werden. Das 2te mal dann eben 
über den Umweg a.h, b.h.

Davor schützt ein include Guard.

Vor dem Fall
LTC2723WC.h wird in a.c
LTC2723WC.h wird in b.c
includiert braucht er auch nicht schützen. Denn a.c wird ja sowieso 
getrennt von b.c compiliert.

von Peter (Gast)


Lesenswert?

Am einfachsten machst Du Dir ein "main.h" wo Du alle globalen defines 
und includes einträgst.

Bei alle andern C.Dateien brauchst Du dann bloss noch das "main.h" zu 
inkludieren plus spezifische Header-Dateien die nur für dies Sourcdatei 
benötigt werden.

von Yvonne J. (laserlight)


Lesenswert?

..soetwas geht mir auch gerade durch den Kopf - guter Plan!

yve

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.