da ich bei folgender Zeile: _delay_ms(10000); nur 5 Sekunden Wartezeit feststelle, glaube ich dass der CPU Takt einen falschen Wert hat. In welchem Headerfile finde ich die Definition? Gruß Bro
Brocken Sei schrieb: > da ich bei folgender Zeile: > _delay_ms(10000); > nur 5 Sekunden Wartezeit feststelle, glaube ich dass der CPU Takt einen > falschen Wert hat. > In welchem Headerfile finde ich die Definition? in gar keinem. Die musst du schon selber machen. Im AVR Studio macht man die sinnvollerweise gleich bei den Projekt-Optionen
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
Probiers doch mal mit einer Suche über alle (Projekt-)Dateien... Oder sieh im Makefile nach, ob da im Compileaufruf was definiert wird...
Brocken Sei schrieb: > #ifndef F_CPU > #define F_CPU 8000000 > #endif Macht AFAIK einfach keinen Sinn und ist nur fehleranfällig. Besser ist:
1 | #ifndef F_CPU
|
2 | #warning "F_CPU not defined"
|
3 | #endif
|
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.
noch besser:
1 | #ifndef F_CPU |
2 | #error "F_CPU not defined" |
3 | #endif |
Das schreckt dann auch die auf, die warnings gewohnheitsmäßig ignorieren :-)
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
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
Brocken Sei schrieb: > Ich habs wieder mit neu deklarieren versucht und er sagt wieder > redefined. Hast du meinen Post von vorhin schon gelesen? :-/ Beitrag "Re: F_CPU, wo steht die Definition"
OK, der Takt stimmt doch, habe vergessen einen Timer vorher auszuschalten, sry. Gruß Bro
Lothar Miller schrieb: > Hast du meinen Post von vorhin schon gelesen? :-/ Ja, habe ich und ich habs so umgeändert, wieso? Gruß Bro
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.
Lothar Miller schrieb: > Hast du meinen Post von vorhin schon gelesen? :-/ Ja habe ich und er hat nichts gefunden, ich habe in meiner ganzen Workbench gesucht wo mein Projekt mit allen Datein drinn ist Gruß Bro
Karl heinz Buchegger schrieb: > bei irgendwelchen Projekt-Optionen Dialogen im Eclipse direkt an ok das erklärts, auch warum ich mochts gefunden habe, danke! Gruß Bro
Brocken Sei schrieb: > Ja das meinte ich, weil ich habe in diesem Dialog meine Frequenz > eingegeben. Dann hast du in dem Projekt (also irgendwo im Makefile) die F_CPU definiert. Such mal in allen Dateien in dem Projektverzeichnis nach F_CPU, du wirst damit das Makefile finden...
Lothar Miller schrieb: > Dann hast du in dem Projekt (also irgendwo im Makefile) die F_CPU > definiert. Such mal in allen Dateien in dem Projektverzeichnis nach > F_CPU, du wirst damit das Makefile finden... Ich habe alle Datein durchsucht, aber ich habe damit nicht das Make File gefunden. Gruß Bro
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
Kommentare in delay.h sagen: The maximal possible delay is 262.14 ms / F_CPU in MHz. The maximal possible delay is 768 us / F_CPU in MHz.
Sie sagen aber auch, dass bei einem grösseren Delay (lediglich) die Auflösung auf 1/10 ms sinkt. Das Maximum ist dann 6,5xxx Sekunden. Carsten
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.