Hallo, AVR-Studio Vers. 4.18. µC Atmega8. Aus dem "AVR-GCC-Tutorial/Die Timer und Zähler des AVR" habe ich beiliegender Code kopiert und versucht zu compilieren, dabei kommt diese Fehlermeldung: PS. <avr/iomx8.h> war hier noch ausgeschaltet!! avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Zeitmess_02.o -MF dep/Zeitmess_02.o.d -c ../Zeitmess_02.c ../Zeitmess_02.c: In function 'main': ../Zeitmess_02.c:16: error: 'TCCR0A' undeclared (first use in this function) ../Zeitmess_02.c:16: error: (Each undeclared identifier is reported only once ../Zeitmess_02.c:16: error: for each function it appears in.) ../Zeitmess_02.c:16: error: 'WGM01' undeclared (first use in this function) ../Zeitmess_02.c:17: error: 'TCCR0B' undeclared (first use in this function) ../Zeitmess_02.c:19: error: 'OCR0A' undeclared (first use in this function) ../Zeitmess_02.c:22: error: 'OCIE0A' undeclared (first use in this function) ../Zeitmess_02.c: At top level: ../Zeitmess_02.c:38: warning: 'TIMER0_COMPA_vect' appears to be a misspelled signal handler make: *** [Zeitmess_02.o] Error 1 Build failed with 7 errors and 1 warnings... Der Sinn dieses Cods ist nur um meine Installation zu testen, später will ich damit schon mal Zeiten messen. Die Versuche mit verschiedenen Headerdateien ( siehe auskommentierte Headers) brachte nur mit <avr/iomx8.h> eine Änderung der Meldung, die dann so aussieht: avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Zeitmess_02.o -MF dep/Zeitmess_02.o.d -c ../Zeitmess_02.c In file included from ../Zeitmess_02.c:6: c:/winavr-20100110/lib/gcc/../../avr/include/avr/iomx8.h:47:4: error: #error "Attempt to include more than one <avr/ioXXX.h> file." make: *** [Zeitmess_02.o] Error 1 Build failed with 1 errors and 0 warnings... Was ist hier falsch? oder geht das mit Atmega8 auf Timer0 prinzipiell nicht? Gruss und danke für eure Hilfe im voraus.
Wenn du dir mal die Mühe machst, ins Datenblatt des Mega8 zu sehen, würdest du bemerken, dass dieser µC mit dem Timer 0 keine PWM erzeugen kann und das es die verwendeten Register und Bits beim Mega8 gar nicht gibt. Das Datenblatt ist dein Freund. Benutze es! Ohne wirst du nicht weit kommen.
Erstmal grundsätzlich: man included für die IO-Definitionen immer nur
<avr/io.h>
Der Header stellt anhängig vom gewählten Prozessor immer die richtigen
Definitionen bereit.
Dein Problem ist, dass der Code für einen anderen Prozessor geschrieben
wurde, als du jetzt benutzten möchtest:
Das Tutorial schrieb:
>" Die folgenden Ausführungen beziehen sich auf den AT90S2313"
Bei Atmel ist es leider ein Volkssport bei jedem uC die Register
umzubenennen. Das heißt, du musst ins Datenblatt von deinen Prozessor
gucken, und nachsehen, wie die Register anzupassen sind.
Die Defines (TCCR0, OCR, OCIE, ..) lauten anders - wie genau steht im
Datenblatt :-)
Multiple includes von io* sind übrigens böse, die entsprechende Meldung
kommt ja auch beim Compilier-Versuch:
> #error "Attempt to include more than one <avr/ioXXX.h> file."
HTH
Danke mal vorerst, werde mich mal am Wochenende durchs Datenblatt durchackern, der letzte Englisch-Unterricht war vor 45 Jahren.
@ Ewald Scherer (rentner62) >Danke mal vorerst, werde mich mal am Wochenende durchs Datenblatt >durchackern, der letzte Englisch-Unterricht war vor 45 Jahren. Dann machs dir ertwas einfacher und lies das Tutorial. Das ist auf deutsch. Dort ist fast alles für den ATmega8 genau erklärt. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial MfG Falk
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.