F_CPU, wo steht die Definition

Gast #1826841
Lesenswert?
• ▲
▼
Karl heinz Buchegger schrieb:
> in gar keinem.
> Die musst du schon selber machen.
> Im AVR Studio macht man die sinnvollerweise gleich bei den
> Projekt-Optionen

Aha, ich dachte das ist schon definiert, weil ich in den lcd-routines
folgenden Codeblock als Grau markiert sehe

#ifndef F_CPU
#define F_CPU 8000000
#endif

Und wenn ich vor den Includes es neu definiere dann sagt er redefined. 
Kann es sein dass Eclipse diese irgendwie definiert aufgrund der 
eingestellten Hardware?

Gruß Bro
#1826857
Lesenswert?
• ▲
▼
Brocken Sei schrieb:

> Aha, ich dachte das ist schon definiert, weil ich in den lcd-routines
> folgenden Codeblock als Grau markiert sehe
>
> #ifndef F_CPU
> #define F_CPU 8000000
> #endif

Das findet mal leider an vielen anderen Stellen auch. delay.h hat auch 
so ein Default mit.

> Und wenn ich vor den Includes es neu definiere dann sagt er redefined.

er sagt dir sicher aber auch, wo der redefine stattfindet bzw. wo die 
ursprüngliche Definition war.

> Kann es sein dass Eclipse diese irgendwie definiert aufgrund der
> eingestellten Hardware?

aufgrund der Hardware sicherlich nicht. AVR können mit vielen 
verschiedenen Taktfrequenzen betrieben werden. Woher soll Eclipse das 
wissen?
Aber auch in Eclipse wird es wohl irgendwo einen Options Dialog geben, 
in dem man die Hardware Eigenschaften irgendwo einstellt.
Gast #1826865
Lesenswert?
• ▲
▼
Lothar Miller schrieb:
> Probiers doch mal mit einer Suche über alle (Projekt-)Dateien...

Habe ich, aber nur das eine das in lcd routines definiert war.

Lothar Miller schrieb:
> Oder sieh im Makefile nach, ob da im Compileaufruf was definiert wird...

Habe ich, auch nichts.

Simon K. schrieb:
> Macht AFAIK einfach keinen Sinn und ist nur fehleranfällig.
>
> Besser ist:
> #ifndef F_CPU
> #warning "F_CPU not defined"
> #endif

Habe ich so umgeändert, und scheibar ist es orgendwo definiert, denn 
kompilieren kann ich immer noch.
Ich habs wieder mit neu deklarieren versucht und er sagt wieder 
redefined.

Gruß Bro
Gast #1826869
Lesenswert?
• ▲
▼
Karl heinz Buchegger schrieb:
> er sagt dir sicher aber auch, wo der redefine stattfindet bzw. wo die
> ursprüngliche Definition war.

Leider nicht. Er sagt nur das was ich definiert habe wurde bereits 
definiert.

g457 schrieb:
> Das schreckt dann auch die auf, die warnings gewohnheitsmäßig ignorieren
> :-)

Warnung gibt es keine.

Karl heinz Buchegger schrieb:
> Aber auch in Eclipse wird es wohl irgendwo einen Options Dialog geben,
> in dem man die Hardware Eigenschaften irgendwo einstellt.


Ja das meinte ich, weil ich habe in diesem Dialog meine Frequenz 
eingegeben.

Gruß Bro
#1826884
Lesenswert?
• ▲
▼
Brocken Sei schrieb:

> Habe ich so umgeändert, und scheibar ist es orgendwo definiert

Das irgendwo wird wohl in <delay.h> sein

Entweder du gibts es
* bei irgendwelchen Projekt-Optionen Dialogen im Eclipse direkt an
* oder du baust ein F_CPU ins Makefile ein, so dass es bei allen
  Compiler Aufrufen mitgegeben wird
* oder du hängst es als allererstes #define in deinen Source Code rein
1
#define F_CPU  2000000
2

3
#include <avr/io.h>
4
#include <Hamstibamsti>
5
#include <was auch immer>
6

7

8
...
9

10
int main()
11
{
12
  ...
13
}

So dass dieses #define vorhanden ist, noch ehe das erste Include File 
inkludiert wird.

Du solltest das definieren von F_CPU in der Reihenfolge der 3 
Möglichkeiten sehen: Options Dialog ist am besten (wenn die IDE das 
Makefile erzeugt), Makefile ist zweite Wahl, direktes Einfügen will man 
vermeiden.

Bei der letzten Möglichkeit besteht sonst die Gefahr, dass 
unterschiedliche *.C Files unterschiedliche Vorstellungen darüber haben, 
wie groß F_CPU ist, weil ja jedes C-File sein eigenes #define hat.
Mit den anderen beiden Möglichkeiten kann das nicht passieren.
#1852485
Lesenswert?
• ▲
▼
Brocken Sei schrieb:
> Kann es sein dass Eclipse diese irgendwie definiert aufgrund der
> eingestellten Hardware?

Auch wenn hier anderes Behauptet wurde, ja, Eclipse definiert F_CPU 
selbst anhand der eingestellten Hardware, was man auch gut sieht wenn 
man sich den Output eines Build anschaut:
1
Building file: ../src/main.c
2
Invoking: AVR Compiler
3
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=1000000UL -MMD -MP -MF"src/main.d" -MT"src/main.d" -c -o"src/main.o" "../src/main.c"
4
Finished building: ../src/main.c
5
...

Und weil Eclipse (manchmal :-)) schlau ist hat es den Block

#ifndef F_CPU
#define F_CPU 8000000
#endif

ausgegraut, da F_CPU ja schon definiert ist.

Thomas

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.