Warum funktioniert das nicht?

Gast #519070
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...
Gast #519081
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();
}
Moderator Persönliche Seite #519107
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>.
Gast #519157
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....

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.