defines verständnisfrage FCPU Warning

OP #1713700
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
#1713717
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.
#1713748
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.
Gast #1713771
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.

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