mikrocontroller.net

Forum: Compiler & IDEs Warum funktioniert das nicht?


Autor: Anfänger hoch 3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sardaukar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
}

Autor: Sardaukar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..zu langsam...

Autor: Anfänger hoch 3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank
Jetzt funktionierts.
Wieder was gelernt.
Klasse Forum.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
void pause(i)
  unsigned int i;
  {
    for (i = 0 ; i < 0xFFFF ; i++)
     nop();
  }

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

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.