Forum: Compiler & IDEs Warum funktioniert das nicht?


von Anfänger hoch 3 (Gast)


Lesenswert?

Hallo...
Kann mir jemand sagen warum der Code nicht funktioniert?
Leider sagen mir die Fehlermeldungen nichts.
AVR Studio 4.12 & WinAVR 20050214

Danke schonmal

//*******************************************************************

#include <avr/io.h>
#define nop() __asm ("nop;")

void pause(void)

  unsigned int i;
  {
    for (i = 0 ; i < 0xFFFF ; i++)
     nop();
  }

int main(void)
{
  DDRB = 0xFF;
  while(1)
  {
    PORTB = 0xFF;  //LEDs aus
    pause();
    PORTB = 0x00;  //LEDs ein
    pause();
  };
}

//*****************************************************************

../test999.c: In function `Delay':
../test999.c:11: error: declaration for parameter "i" but no such 
parameter
../test999.c:12: error: number of arguments doesn't match prototype
cc1.exe: error: prototype declaration
make: *** [test999.o] Error 1
Build failed with 3 errors and 0 warnings...

von Rolf Magnus (Gast)


Lesenswert?

Der Compiler will dir sagen, daß er mit dem 'unsigned int i;' zwischen 
Funktionskopf und -rumpf nichts anfangen kann. Das muß in die Funktion 
rein.

von Sardaukar (Gast)


Lesenswert?

hmm, ich würd sagen, dass "i" in der Funktion "pause" außerhalb 
definiert und damit nicht gültig innerhalb der Funktion ist.
Mach einfach die geschweiften Klammern um das ganze rum.

void pause(void)
{
  unsigned int i;

    for (i = 0 ; i < 0xFFFF ; i++)
     nop();
}

von Sardaukar (Gast)


Lesenswert?

..zu langsam...

von Anfänger hoch 3 (Gast)


Lesenswert?

Vielen Dank
Jetzt funktionierts.
Wieder was gelernt.
Klasse Forum.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus wrote:

> Der Compiler will dir sagen, daß er mit dem 'unsigned int i;' zwischen
> Funktionskopf und -rumpf nichts anfangen kann. Das muß in die Funktion
> rein.

Genauer gesagt: er könnte damit was anfangen.  Er hat es als K&R-artige
Deklaration eines Funktionsparameters angenommen, aber dazu fehlte
ihm dann dieser Parameter in der Parameterliste der Funktion.  Er
hätte also etwa sowas erwartet:
1
void pause(i)
2
  unsigned int i;
3
  {
4
    for (i = 0 ; i < 0xFFFF ; i++)
5
     nop();
6
  }

Ist natürlich in diesem Falle sinnlos, da ja i, obwohl Parameter,
hinterher gleich gebügelt wird.  Wenn man obiges aber mal gesehen
hat, sollte einem besser klar werden, warum die Fehlermeldungen
des Compilers genau so und nicht anders aussahen.

Btw., nimm bitte die Funktionen aus <util/delay.h>.

von Andreas Paulin (Gast)


Lesenswert?

Achtung: Wenn Du die Funktionen aus <delay.h> verwendest:
Genau ansehen - Die können nur max. 10..20msec verzögern
(abh. von Taktfrequenz).
Ggfs in Schleife mehrfach aufrufen, dann kommt zwar der Aufrufoverhead 
dazu, aber sooo genau brauchts meist nicht....

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.