Forum: Compiler & IDEs Taktanzahl für Sprung


von yamamoto (Gast)


Lesenswert?

Hallo Leute,
ich würde gerne wissen wieviele Takte der ATMega8 braucht um einen 
Sprung auszuführen.

Ich habe in C eine Funktion geschrieben, die Bits senden soll. Das 
Listing sieht folgendermasen aus:
1
00000146 <senden>:
2
3
  while(1){
4
5
//    zaehler1DauerPattern=4;
6
7
    asm volatile (
8
 146:  50 91 3f 01   lds  r21, 0x013F
9
 14a:  40 91 40 01   lds  r20, 0x0140
10
 14e:  30 91 3d 01   lds  r19, 0x013D
11
 152:  20 91 3e 01   lds  r18, 0x013E
12
 156:  80 91 41 01   lds  r24, 0x0141
13
 15a:  90 91 42 01   lds  r25, 0x0142
14
 15e:  32 bb         out  0x12, r19  ; 18
15
 160:  42 bb         out  0x12, r20  ; 18
16
 162:  42 bb         out  0x12, r20  ; 18
17
 164:  32 bb         out  0x12, r19  ; 18
18
 166:  80 93 41 01   sts  0x0141, r24
19
 16a:  90 93 42 01   sts  0x0142, r25
20
21
22
      :[zaehler1DauerPattern] "+r" (zaehler1DauerPattern),[zaehler2DauerPattern] "+r" (zaehler2DauerPattern): [txen_l_txd_h] "r" (txen_l_txd_h), [txen_l_txd_l] "r" (txen_l_txd_l),[txen_h_txd_h] "r" (txen_h_txd_h), [txen_h_txd_l] "r" (txen_h_txd_l), [addrPORTD] "I" (_SFR_IO_ADDR (PORTD))
23
    ); 
24
25
    wdt_reset();
26
 16e:  a8 95         wdr
27
 170:  ea cf         rjmp  .-44       ; 0x146 <senden>

Er sendet kontinuirlich 4 Bits. Zwischen den Packeten sind immer Pausen, 
weil er Zeit für den Rücksprung braucht. Allerdings messe ich zwischen 
den Bitpacketen viel mehr als 10 Takte. Woran liegt das?


Danke und Gruß
Yamamoto

von User (Gast)


Lesenswert?

> Allerdings messe ich zwischen den Bitpacketen viel mehr als 10 Takte.

Wieviel mehr? ..wenn mans mal rein nach Datenblatt abzählt, dann müssten 
das sein..:
- 6x lds - 12 Takte
- 2x sts - 4 Takte
- vermutlich ein rjmp - 2 Takte

Macht also 18 Takte Pause auf vier Takte Bitbanging. Weicht Dein 
Messergebnis erheblich davon ab?

Grüße

von doc (Gast)


Lesenswert?

Wieviele Takte eine Befehl braucht, steht im Datenblatt.

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.