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


von blackfinman (Gast)


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

von Sehrwitzig ⌂. (sehrwitzig)


Lesenswert?

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

von Hegy (Gast)


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

von JÜrgen G. (psicommand)


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

von johnny.m (Gast)


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?

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.