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
Deine Reihenfolge ist dergestalt, dass sie diese Warnung nicht erzeugen sollte. Bist du sicher, dass du auch die richtige Datei compilierst?
Yvonne J. schrieb: > wie bekomme ich das in den griff, das das richitg ineinander fasst? > makefile? Japp - ist die sinnvollere Variante > Gruß, > Yve Florian
...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
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.
...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
Oder mit dem von dir bereits angesprochenen makefile - das ist dann dein "globales define". vg
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.
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.
..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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.