mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verzögerung mittels einer Schleife


Autor: blackfinman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo allerseits,

bin gerade in der Einarbeitungsphase und konnte nicht verstehen warum in 
diesem Code für UART (aus einem Buch) eine verzögerung eingebaut ist:

void main(void)
{
   .....
   for( ;; )
    {
       if(ReceiveData(&UartData))
          TransmitData(&UartData)
    }

   Delay();
}
 die Funktion delay ist:

void Delay(void)
{
    unsigned int i = 0x7FFF;
    while(--i);
}

ich vermute die Verzögerung damit nicht die gleichen Daten abgefragt 
werden bin mir nicht sicher.

mich interessiert ausserdem wie lange diese erzögerung dauert??
0x7FFF * Clock vielleicht ???

welcher Zusammenhang besteht zwischen die Verzögerung und die Baudrate 
??


ich habe noch nie mit MCU gearbeitet und hoffe ihr könnt mir helfen.

LG

Autor: Sehrwitzig ⌂⌂ (sehrwitzig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Verzögerung hat an der Stelle garkeinen Sinn, weil sie nie 
aufgerufen wird. Die for-Schleife läuft endlos...

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...und selbst wenn Delay() aufgerufen werden würde, wäre da eigentlich 
auch keine Verzögerung zu holen, weil so'n Compiler das wegoptimiert 
(stumpfes rauf- oder runterzählen von Var. nur um Zeit zu schinden).

Autor: JÜrgen Grieshofer (psicommand)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Zeit der Verzögerung wär auch nicht genau festgelegt, weil sie 
0x7FFF * der Zykluszeit dauern würde. Diese ist allerdings von der Größe 
des Programms und der Rechenintensität abhängig...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Diese ist allerdings von der Größe des Programms und der Rechenintensität
> abhängig...
Wieso das? Die Durchlaufzeit einer solchen Schleife hängt davon ab, was 
der Compiler aus dieser Schleife macht und ob irgendwelche Interrupts 
während des Schleifendurchlaufs auftreten können. Wenn man weiß, was der 
Compiler draus macht (sofern er bei eingeschalteter Optimierung 
überhaupt was draus macht) und wenn sichergestellt ist, dass keine 
Interrupts auftreten können, dann kann man die Zeit, die eine solche 
Schleife benötigt, durchaus genau angeben.

Mit der "Rechenintensität" an sich hat das überhaupt nichts zu tun, weil 
außer evtl. auftretenden Interrupts ja während der Schleife nichts 
anderes gemacht werden kann. Und was soll die Programmgröße damit zu tun 
haben?

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.