Forum: Mikrocontroller und Digitale Elektronik AVR: Wieviele Takte?


von Hans R. (Gast)


Lesenswert?

Wieviele Takte braucht

i=0;
while (i<211) i++;

und

PORTB=0x04;

?

von Ronny (Gast)


Lesenswert?

Kommt drauf an,was der C-Compiler daraus macht.Keiner der beiden Befehle
kann mit einem Maschinenbefehl(== ein Taktzyklus bei den meisten
Befehlen)  abgearbeitet werden.

PORTB =... wäre mit 2 Maschinenbefehlen noch am kompaktesten
realisierbar,was aber nicht automatisch heisst,das das auch jeder
C-Compiler so hinbekommt.Vor allem in niedrigeren Optimierungsstufen
und bei Debug-Codes wird der Code etwas grösser ausfallen.

Hängt aber u.a. auch noch davon ab,welcher Code davor kommt.Steht z.B
die Variable 'i' in einem Register,kann 'i = 0;' mit einem
Takt/Maschinenbefehl realisiert werden,ansonsten werden wieder 2
benötigt.

Lies dir doch mal das Tutorial hier auf der Seite durch,damit bekommst
du ungefähr ein Gefühl,wie welche C-Konstrukte in Assembler realisiert
werden können.Uas dem Listing eines C-Compilers kann man auch sehen,wie
der Compiler bestimmte Sequenzen übersetzt.Aber der generierte Code ist
oft etwas komplizierter zu verstehen,wenn man keine Übung darin hat.

von Stefan (Gast)


Lesenswert?

-> simulator

von Peter D. (peda)


Lesenswert?

> Wieviele Takte braucht
>
> i=0;
> while (i<211) i++;

Irgendwas zwischen 0 (i nicht volatile) und 100000 (i double)

Deshalb macht man sowas nicht.

Entweder man nimmt nen Timer oder delay() aus der Bibliothek.

Wer sagt, er hätte nicht genug Timer, einfach einen Timer frei laufen
lassen, dann kann jeder Prozess ihn benutzen.


Peter

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.