Forum: Mikrocontroller und Digitale Elektronik Verzögerungsschleife


von Chris123 (Gast)


Lesenswert?

Ich will eine Verzögerung programmieren, und habe es wie folgt gemacht:

void warte(uint16_t t) {                                        //
Funktion "Warteschleife"
  uint16_t i, j;

  for (i=0;i<t;i++) {                                         //
Verschachtelte Schleife mit Befehl NOP="Tue nichts", damit
    for (j=1;j<200;j++) {                                 // die 
Schleife
nicht wegoptimiert wird.
      asm volatile ("nop");
    }
  }
}


Ich rufe die Funktion mit warte(2000) in main auf...
Leider bekomme ich prompt eine Fehlermeldung:

Compiling: main.c
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL  -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 -MD -MP -MF
.dep/main.o.d main.c -o main.o
main.c: In function `main':
main.c:20: warning: implicit declaration of function `warte'
main.c: At top level:
main.c:30: error: conflicting types for 'warte'
main.c:20: error: previous implicit declaration of 'warte' was here
main.c:38:2: warning: no newline at end of file
make.exe: *** [main.o] Error 1


Was mache ich falsch ?

von Hubert.G (Gast)


Lesenswert?

Warum verwendest du nicht <avr/delay.h>

Ich halte allerdings ein nichtstun des Controller für Verschwendung.

von john (Gast)


Lesenswert?

du rufst anscheinend warte auf before du es deklarierst.

entweder den body der funktion vor die main() kopieren
oder die funktion prototypen in dem du unter die #include zeilen
einfach void warte(uint16_t t); schreibst

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.