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

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