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
Die Verzögerung hat an der Stelle garkeinen Sinn, weil sie nie aufgerufen wird. Die for-Schleife läuft endlos...
...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).
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...
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.