for schleife

#149567
Lesenswert?
• ▲
▼
"Bitte klärt mich auf ;-)"

Es kann schlichtweg alles passieren, völlig abhängig von Variablentyp,
Compilerversion und Optimierungslevel.

Daher ist sowas einfach nur sauschlechter Programmierstil (nicht
portabel, nicht reproduzierbar).

Entweder man nimmt die Delay-Funktion oder einen Timer, alles andere
ist reiner Zufall.


Peter
Gast #149569
Lesenswert?
• ▲
▼
das liegt weniger an der Verwaltung der Schleife (aber auch).
Du steckst einfach nicht dahinter, wie der Compiler das umsetzt. Geht
damit los, wo die Variablen abgelegt werden (liegen sie in Registern,
ist der Kram deutlich schneller als im RAM), ein anderer Compiler (oder
auch nur eine neuere Version des selben Conmpilers) bringen völlig
andere Ergebnisse, ebenso die Optimierungseinstellungen.
Fazit: Finger weg von solchem Krimskrams.
In Assembler kann man es in der Art machen, in einer Hochsprache nicht.
Gast #149570
Lesenswert?
• ▲
▼
nunja, also mit 16MHz macht man 16 millionen Cycles.
Das was du machst, sind 15 millionen schleifendurchgänge einer
For-Schleife in C.
Und das Abarbeiten einer C-Instruktion dieser Gattung dauert mehr als
nur einen Takt.

Was ein wenig mehr deine Rechnung aufgehen lassen würde, wär folgender
asm code:
(natürlich müsstest du den code noch an deine Umgebung anpassen)

mov reg1, 16000000 ;(24 bits sind da ausreichend)
loop0:
inc reg1
xor reg1, x  ;setzt zero-flag, wenn reg1 und x gleich sind
jnz loop0    ;springt zu loop0, wenn zero-flag nicht gesetzt ist

Nun addierst du die Anzahl der benötigten Taktzyklen der einzelnen
Instruktionen
inc [reg]
xor [reg], const
jnz (bedingter Sprungbefehl)
zusammen.
16000000 geteilt durch diese Zahl ist x.

Wenn das ganze nun 5 Taktzyklen braucht, läuft die Schleife 3200000 mal
durch. Und das in ziemlich genau einer Sekunde.
sorry für den schlechten code, hab noch nie einen atmel programmiert :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren