Hi Leute! Habe folgendes Problem: habe für den ATMEGA8(L) ein c-programm geschrieben und compiliert (im DOS: avr-gcc code.c) und es kamen etliche fehlermeldungen (siehe weiter unten)! -> dürfte wahrscheinlich an der header-datei liegen - habe aba leider keine ahnung, von wo ich die bekomme und wo ich sie einbinden muss (welches verzeichnis, etc.!) -> da ich ein blutiger anfänger bin, würde ich euch bitten foglendes zu beachten: "Es gibt keine blöden Fragen, es gibt nur blöde antworten!" ;o) thx, Gruß GreenhornTW code.c:2:61: mega8.h: No such file or directory code.c:20: error: parse error before "RxFlag" code.c:20: warning: data definition has no type or storage class code.c:32: error: `TIM0_OVF' undeclared here (not in a function) code.c:32: error: syntax error before "void" code.c: In function `timer0_ovf_isr': code.c:34: error: `TCNT0' undeclared (first use in this function) code.c:34: error: (Each undeclared identifier is reported only once code.c:34: error: for each function it appears in.) code.c: In function `pd2_int': code.c:47: error: `TCNT0' undeclared (first use in this function) code.c: In function `interrupt': code.c:67: error: `TIFR' undeclared (first use in this function) code.c:67: error: `T0V0' undeclared (first use in this function) code.c:71: error: `GIFR' undeclared (first use in this function) code.c:71: error: `INTF0' undeclared (first use in this function) code.c:73: error: parse error before ')' token code.c: At top level: code.c:78: error: `USART_RXC' undeclared here (not in a function) code.c:78: error: syntax error before "void" code.c: In function `RX_int_isr': code.c:81: error: `UDR' undeclared (first use in this function) code.c: In function `main': code.c:108: error: `PD3' undeclared (first use in this function) code.c:89: warning: return type of `main' is not `int' code.c: At top level: code.c:123: warning: type mismatch with previous implicit declaration code.c:90: warning: previous implicit declaration of `InitSFRs' code.c:123: warning: `InitSFRs' was previously implicitly declared to return `int' code.c: In function `InitSFRs': code.c:125: error: `PortD' undeclared (first use in this function) code.c:126: error: `DDRD' undeclared (first use in this function) code.c:130: error: `TCCR0' undeclared (first use in this function) code.c:131: error: `TCNT0' undeclared (first use in this function) code.c:135: error: `MCUCR' undeclared (first use in this function) code.c:136: error: `GICR' undeclared (first use in this function) code.c:139: error: `TIMSK' undeclared (first use in this function) code.c:147: error: `UCSRA' undeclared (first use in this function) code.c:148: error: `UCSRB' undeclared (first use in this function) code.c:149: error: `UCSRC' undeclared (first use in this function) code.c:150: error: `UBRRH' undeclared (first use in this function) code.c:151: error: `UBRRL' undeclared (first use in this function) code.c: In function `SerSend': code.c:157: error: `UCSRA' undeclared (first use in this function) code.c:157:26: invalid suffix "b00100000" on integer constant code.c:159: error: `UDR' undeclared (first use in this function) code.c: In function `MobilePhoneInit': code.c:166: warning: passing arg 1 of `SerSend' makes integer from pointer without a cast code.c: In function `Dial': code.c:175: warning: passing arg 1 of `SerSend' makes integer from pointer without a cast askennecode.c:2:61: mega8.h: No such file or directory code.c:20: error: parse error before "RxFlag" code.c:20: warning: data definition has no type or storage class code.c:32: error: `TIM0_OVF' undeclared here (not in a function) code.c:32: error: syntax error before "void" code.c: In function `timer0_ovf_isr': code.c:34: error: `TCNT0' undeclared (first use in this function) code.c:34: error: (Each undeclared identifier is reported only once code.c:34: error: for each function it appears in.) code.c: In function `pd2_int': code.c:47: error: `TCNT0' undeclared (first use in this function) code.c: In function `interrupt': code.c:67: error: `TIFR' undeclared (first use in this function) code.c:67: error: `T0V0' undeclared (first use in this function) code.c:71: error: `GIFR' undeclared (first use in this function) code.c:71: error: `INTF0' undeclared (first use in this function) code.c:73: error: parse error before ')' token code.c: At top level: code.c:78: error: `USART_RXC' undeclared here (not in a function) code.c:78: error: syntax error before "void" code.c: In function `RX_int_isr': code.c:81: error: `UDR' undeclared (first use in this function) code.c: In function `main': code.c:108: error: `PD3' undeclared (first use in this function) code.c:89: warning: return type of `main' is not `int' code.c: At top level: code.c:123: warning: type mismatch with previous implicit declaration code.c:90: warning: previous implicit declaration of `InitSFRs' code.c:123: warning: `InitSFRs' was previously implicitly declared to return `int' code.c: In function `InitSFRs': code.c:125: error: `PortD' undeclared (first use in this function) code.c:126: error: `DDRD' undeclared (first use in this function) code.c:130: error: `TCCR0' undeclared (first use in this function) code.c:131: error: `TCNT0' undeclared (first use in this function) code.c:135: error: `MCUCR' undeclared (first use in this function) code.c:136: error: `GICR' undeclared (first use in this function) code.c:139: error: `TIMSK' undeclared (first use in this function) code.c:147: error: `UCSRA' undeclared (first use in this function) code.c:148: error: `UCSRB' undeclared (first use in this function) code.c:149: error: `UCSRC' undeclared (first use in this function) code.c:150: error: `UBRRH' undeclared (first use in this function) code.c:151: error: `UBRRL' undeclared (first use in this function) code.c: In function `SerSend': code.c:157: error: `UCSRA' undeclared (first use in this function) code.c:157:26: invalid suffix "b00100000" on integer constant code.c:159: error: `UDR' undeclared (first use in this function) code.c: In function `MobilePhoneInit': code.c:166: warning: passing arg 1 of `SerSend' makes integer from pointer without a cast code.c: In function `Dial': code.c:175: warning: passing arg 1 of `SerSend' makes integer from pointer without a cast
Ihgitt, ist ja eklig :-) Wenn Du ein blutiger Anfänger bist, dann empfehle ich Dir das allseitsbeliebte "Hello, World!", um erst mal Deine Entwicklungsumgebung ordentlich einzurichten. Näheres dazu findest Du warscheinlich im AVR-GCC Forum. So ein Mega-File gleich als erstes Kompilieren zu wollen, ohne überhaupt zu wissen, ob die Toolchain läuft ist zwecklos... Gruß, Patrick...
Ja, und die blöde Antwort ist: ohne diese Headerdatei kann Dir keiner helfen. Du mußt also schon denjenigen finden, der den originalen Code verbrochen hat. Unter avr-gcc wäre die passende Headerdatei via <avr/io.h> zu finden, wobei Deine -mmcu=atmega8 Option gesetzt sein muß. Allerdings ist der C-Code offenbar nicht für den avr-gcc geschrieben worden.
bezüglich "Hello World" hast du natürlich recht - jedoch aus zeitgründen war ich gezwungen es einfach so zu risikieren (also drauf losprogrammieren und "hoffen")! ;o) trotzdem danke für eure antworten, werde mich mal übers richtige compilieren schlau machen... dachte das es mit avr-gcc klappt. mfg, GreenhornTW
Das "kompilieren" wird auch mit avr-gcc klappen. Wenn die Voraussetzungen stimmen... Die Ausrede mit den Zeitgründen kommt immer wieder und ist schlichtweg falsch. Die Fehlersuche kostet dann nämlich mehr Zeit als das Erstellen eines Minimalprogrammes! Gruß, Patrick...
denke ich habe jetzt die richtigen header datein(glaub ich mal). habe den Code in WinAVR geschrieben, nur weiß ich nicht mit welchem Befehl ich den Code kompilieren kann. avr-gcc war ja falsch.
Schau Dir doch mal das Beispielmakefile an. Das auf Dein Projekt angepasst sollte genau das sein, was Du brauchst. Gruß, Patrick...
Back again :) Haben jetzt alle errors ausgemerzt und das make file richtig erstellt. Jetzt gibt es nur mehr ein paar wenige warnings zu denen wir fragen haben. Vielleicht hat ja jemand zeit um sich den code (siehe anhang) kurz anzuschaun. thx, Greenhorn TW
ups vergessen avr-gcc -c -mmcu=atmega8 -I. -g -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=main.lst main.c -o main.o main.c:48: warning: function declaration isn't a prototype main.c:50: warning: function declaration isn't a prototype main.c:51: warning: function declaration isn't a prototype main.c:113: warning: function declaration isn't a prototype main.c:113: warning: return type of `main' is not `int' main.c:147: warning: function declaration isn't a prototype main.c:189: warning: function declaration isn't a prototype main.c: In function `MobilePhoneInit': main.c:190: warning: passing arg 1 of `SerSend' makes integer from pointer without a cast main.c: At top level: main.c:196: warning: function declaration isn't a prototype main.c: In function `Dial': main.c:199: warning: passing arg 1 of `SerSend' makes integer from pointer without a cast main.c:200: warning: implicit declaration of function `wait'
Naja, ist doch ziemlich selbsterklärend, oder? (Die Zeilennummern passen aber nicht zur Datei.) > main.c:48: warning: function declaration isn't a prototype void InitSFRs(); Sowas ist zwar eine Funktionsdeklaration, aber eine `old style' (pre-C90, sogenanntes ``K&R C''). Für C wäre korrekt: void InitSFRs (void); Unter C++ sind beide Deklarationen übrigens identisch. > main.c:113: warning: return type of `main' is not `int' Steht doch auch da, schon tausendmal durchgekaut: gültige Funktionsprototypen für main() gemäß C-Standard sind int main(void); int main(int, char **); Falls main() jemals zurückkehrt, wird der von ihm zurückgegebene Wert standardgemäß an exit() weitergereicht. Die mitgelieferte Funktion exit() ignoriert ihn natürlich (und verbleibt in einer Endlosschleife), aber es hinder Dich niemand daran, eine eigene Funktion exit() zu schreiben, die mit dem Wert was anstellt. > main.c:190: warning: passing arg 1 of `SerSend' makes integer from > pointer without a cast Diese Warnung stimmt nicht mit Deinem geposteten Sourcecode überein. > main.c:200: warning: implicit declaration of function `wait' Auch selbsterklärend: wait() ist nirgends deklariert. Ich sehe auch keine Implementierung, eigentlich müßtest Du einen linker error bekommen. Hast Du die Implementierung in einer anderen Funktion? Dann deklariere sie (sinnvollerweise über eine Headerdatei). Erwartest Du die Implementierung in der avr-libc? Geht nicht, ist zu sehr abhängig von der jeweiligen Implementierung. Eine Implementierung könnte über einen hardware timer erfolgen, zur Not auch (aber das ist eher `proof of concept') über die Makros in <avr/delay.h>. Da mußt Du aber noch eine Schleife drumrumsetzen, sonst kommst Du nicht auf so lange Zeiten. Weiterhin sind Deine Interrupthandler noch nicht richtig deklariert, die mußt Du mit SIGNAL(SIG_xxx) deklarieren, siehe Doku. Zum Stil: magische Zahlen (MCUCR=0x03;) sollte man vermeiden, schreibe besser MCUCR = _BV(ISC00) | _BV(ISC01);.
danke für deine schnelle antwort...hilft uns sicha weita!!! Gruß, Greenhorn TW
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.