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...
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.
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(); }
Vielen Dank Jetzt funktionierts. Wieder was gelernt. Klasse Forum.
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>.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.