Forum: Mikrocontroller und Digitale Elektronik error und ihre ursachen??


von GreenhornTW (Gast)


Angehängte Dateien:

Lesenswert?

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

von OldBug (Gast)


Lesenswert?

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...

von Jörg Wunsch (Gast)


Lesenswert?

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.

von GreenhornTW (Gast)


Lesenswert?

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

von OldBug (Gast)


Lesenswert?

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...

von GreenhornTW (Gast)


Lesenswert?

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.

von GreenhornTW (Gast)


Lesenswert?

danke oldBug.

von OldBug (Gast)


Lesenswert?

Schau Dir doch mal das Beispielmakefile an. Das auf Dein Projekt
angepasst sollte genau das sein, was Du brauchst.

Gruß,
Patrick...

von GreenhornTW (Gast)


Angehängte Dateien:

Lesenswert?

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

von OldBug (Gast)


Lesenswert?

...welche warnings...?

von GreenhornTW (Gast)


Lesenswert?

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'

von Jörg Wunsch (Gast)


Lesenswert?

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);.

von GreenhornTW (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.