Forum: Compiler & IDEs Anfängerprobleme C Programm


von Martin B. (martin90)


Lesenswert?

Hallo,
bin gerade daran mir das AVR GCC Tutorial anzueignen...habe aber schon 
meine ersten Problem. Möchte mit dem ATMEGA 8 anfangen.

Hier mein Programm:
1
#include <avr/iom8.h>
2
#include <avr/delay.h>
3
4
int main(void)
5
{
6
  while (!(PINC&(1<<PC0))) 
7
  {
8
  DDRD=0xff;
9
  PORTD&=~(1<<PD0);
10
  }
11
}

Bekomme aber immer diese Fehlermeldungen:

D:\AVR 
Programme\Programmierboard\..\..\Programme\WinAVR20100110\avr\include/av 
r/iom8.h:41:4:  error: #error "Include <avr/io.h> instead of this file."
In file included from ../Programmierboard.c:2:0:
D:\AVR 
Programme\Programmierboard\..\..\Programme\WinAVR20100110\avr\include/av 
r/delay.h:36:2:  warning: #warning "This file has been moved to 
<util/delay.h>."
In file included from D:\AVR 
Programme\Programmierboard\..\..\Programme\WinAVR20100110\avr\include/av 
r/delay.h:37:0,
                 from ../Programmierboard.c:2:
D:\AVR 
Programme\Programmierboard\..\..\Programme\WinAVR20100110\avr\include/ut 
il/delay.h:85:3:  warning: #warning "F_CPU not defined for 
<util/delay.h>"
../Programmierboard.c: In function 'main':
../Programmierboard.c:6:2: warning: implicit declaration of function 
'_SFR_IO8'
../Programmierboard.c:8:2: error: lvalue required as left operand of 
assignment
../Programmierboard.c:9:2: error: lvalue required as left operand of 
assignment
make: *** [Programmierboard.o] Fehler 1
Build failed with 3 errors and 3 warnings...


Was mache ich falsch???

von Klaus W. (mfgkw)


Lesenswert?

Include <avr/io.h> instead of this file.

von Sven P. (Gast)


Lesenswert?

Martin B. schrieb:
> Bekomme aber immer diese Fehlermeldungen:
Nun, die Meldungen sind eigentlich recht eindeutig:

> error: #error "Include <avr/io.h> instead of this file."
Und
> warning: #warning "This file has been moved to <util/delay.h>."

Und
> warning: #warning "F_CPU not defined for <util/delay.h>"

Die ersten beiden sind selbstredend, für die letzte findest du genügend 
Information.

von ich (Gast)


Lesenswert?

Sry, aber was ist das Problem? In der Fehlermeldung stehen jede Menge 
Hinweise.

von Klaus W. (mfgkw)


Lesenswert?

Nicht der Blocker, aber nur am Rande: In der Schleife DDRD immer auf 
denselben Wert zu setzen, ist sinnlos - einmal vor der Schleife reicht, 
wenn man es nicht wieder ändern möchte.

von Karl H. (kbuchegg)


Lesenswert?

Martin B. schrieb:

> #include <avr/iom8.h>

Wie auch die erste Meldung deines Compilers besagt (hast du die 
gelesen?), wird diese Datei nicht includiert.

Du inkludierst immer

#include <avr/io.h>

dass sich da ein Mega8 dahinter versteckt und in weiterer Folge iom8.h 
zu inkludieren ist, das regelt io.h selber. Deshalb gibst du ja auch den 
Prozessortyp an.

> #include <avr/delay.h>

Auch hier ist doch die Fehlermeldung aussagekräftig genug.
Die Datei ist auf
#include <util/delay.h>


Du musst die Fehlermeldungen, die du bekommst schon auch lesen!
Die werden nicht einfach nur so zum Spass ausgegeben.

von Klaus W. (mfgkw)


Lesenswert?

ich schrieb:
> Sry, aber was ist das Problem? In der Fehlermeldung stehen jede Menge
> Hinweise.

Du #includest avr/iom8.h

Nimm stattdessen avr/io.h!

Welche CPU man hat, sollte vom AVR-Studio oder aus dem makefile heraus 
oder wie auch immer definiert sein, und je nach dem wird dann von io.h 
die richtige Headerdatei genommen, z.B. iom8.h bei einem atmega8.

von Uwe (de0508)


Lesenswert?

Hallo Martin,

der gcc spuckt alles aus.

F_CPU muss im Makefile definiert werden.
Die Includefiles stehen in:
<avr/io.h>
<util/delay.h>

aber Delay wird nicht verwendet, kann also weg !

sauber wäre es, wenn der Leser sieht was Du machst:
1
<avr/io.h>
2
3
int main(void) 
4
{
5
 PORTC |= _BV(PC0); //der leser sieht sofort: pullup-on an PC0 'on'
6
 DDRC &= ~_BV(PC0); //der leser sieht sofort: PC0 ist Eingabe
7
8
 DDRD = 0xff;
9
10
 while ( ((~PINC) & _BV(PC0)) == _BV(PC0) ) // Taster (==0) gedrückt
11
  {
12
    PORTD &= ~_BV(PD0); // pin auf low
13
    // macht das Sinn ?
14
  }
15
16
  return 0;
17
}

von Martin B. (martin90)


Lesenswert?

Also habs jetzt so abgeändert:
1
#include <avr/io.h>
2
#include <avr/iom8.h>
3
#include <util/delay.h>
4
5
int main(void)
6
{
7
  DDRD=0xff;
8
  while (!(PINC&(1<<PC0))) 
9
  {
10
  PORTD&=~(1<<PD0);
11
  }
12
}


F_CPU muss ich doch nicht definieren oder??? Steht doch in der delay.h 
datei.

Jetzt bekomm ich noch die Fehlermeldung:
Fatal error: unknown MCU: atmega8a

Liegt das daran das ich den beim Erstellen des neuen Projekts den 
ausgewählt habe? Aber es gibt doch nich den atmega8 ohne dem "a" 
dahinter.

von Klaus W. (mfgkw)


Lesenswert?

Dann lass doch das a weg, SW-seitig sind die wohl gleich.

von Klaus W. (mfgkw)


Lesenswert?

Martin B. schrieb:
> F_CPU muss ich doch nicht definieren oder??? Steht doch in der delay.h
> datei.

woher soll die delay.h wissen, mit welcher Frequenz dein AVR läuft?

Eben wenn du delay.h benutzt, musst du F_CPU richtig definieren, sonst 
stimmen die Wartezeiten nicht.

von Martin B. (martin90)


Lesenswert?

Danke jetzt funtionierts.

von xyz (Gast)


Lesenswert?

Martin B. schrieb:
>
1
#include <avr/io.h>
2
> #include <avr/iom8.h>
Das geht aber auch nur gut weil es include-guards gibt! 2. Zeile 
ersatzlos streichen bitte.

von Walter S. (avatar)


Lesenswert?

Martin B. schrieb:
> Danke jetzt funtionierts.
aber nur das compilieren,
das Programm ist immer noch Unsinn,
sobald das while nicht mehr erfüllt ist landet das Programm im Nirwana 
(na ja, nicht wirklich)

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.