kanns Assembler schneller als Bascom!?

Gast #560134
Lesenswert?
• ▲
▼
Hi. vorab: ich habe KEINE AHNUNG von ASM

ich habe einen AVR, auf dem läuft unter bestimmten vorraussetzungen 
folgender code:

if pind.2=0 then
portc.1=0
else
portc.1=1
endif        16-17 takte

habe auch schon

portc.1=pind.2 ca 12 takte

versucht. Leider ist der code einen tick zu langsam.
Geht es in assembler schneller??

Gast #560144
Lesenswert?
• ▲
▼
>Hi. vorab: ich habe KEINE AHNUNG von ASM

Von Bascom wohl auch nicht?

>Geht es in assembler schneller??

Minimal. 3 Takte bei erfülltem Vergleich (mit Jump), 2 Takte sonst. Mit 
C erhältst du in diesem Fall die gleiche Geschwindigkeit wie mit 
Assembler.
#560145
Lesenswert?
• ▲
▼
> portc.1=pind.2 ca 12 takte

Was muss gemacht werden?

   in   rxx, PIND
   and  rxx, $04
   lsr  rxx
   in   rxy, PINC
   or   rxy, rxx
   out  PORTC, rxy

macht zusammen 6 Takte.
Wenn jetzt allerdings die Register nicht frei sind und auch
noch gesichert / wiederhergestellt werden müssen, wirds
schon eng.

Gast #560148
Lesenswert?
• ▲
▼
Karl heinz Buchegger wrote:
>  and  rxx, $04
müsste eher "andi" sein, gell?

> in   rxy, PINC
Da würde ich eher PORTC nehmen. Und PORTC.1 muss noch Null gesetzt 
werden vor dem or.

Ich komm deshalb auf minimal 7 Takte:
1
in r16, pind    ;PIND einlesen
2
in r17, portc   ;PORTC einlesen
3
lsr r16         ;Zustand von PIND um eine Stelle nach rechts (Bit 2 auf Pos. 1 schieben)
4
andi r16, 0x02  ;Bit 1 maskieren, alle anderen löschen
5
andi r17, 0xfd  ;Bit 1 in PORTC-Zustand löschen
6
or r17, r16     ;Zustand von PIND.2 an Pos. 1 von PORTC
7
out portc, r17  ;PORTC schreiben
Registernummern nach Verfügbarkeit, aber auf jeden Fall > r16 wg. 
immediate-Operationen.
Gast #560172
Lesenswert?
• ▲
▼
@michi
>Von Bascom wohl auch nicht?

WIESO? ich benötige an einer bestimmten stelle einfach einen schnellen 
pass-through

Kannst du uns zeigen, wie du das mit 3/2 takten machst??

Danke für die anderen antworten.
Gast #560173
Lesenswert?
• ▲
▼
werde das programm mal im simulator laufen lassen und sehen, welche 
register noch frei sind. diese stelle im code ist sowieso sagen wir die 
ENDSTATION. wenn bestimmt bedingungen nicht erfüllt sind, wird halt 
durchgeschalten
Gast #560180
Lesenswert?
• ▲
▼
also würde es in meinem fall so aussehen
1
in r16,PinD      ; Port einlesen
2
in r17,PinC      ; Port einlesen
3

4
bst r16,2        ; Bit nach T-Flag
5
bld r17,1        ; Bit setzen
6

7
bst r16,6        ; Bit nach T-Flag
8
bld r17,0        ; Bit setzen
9
Out Portc , R17 ; Port Ausgeben

dann wird pind2 -> portc.1
          pind6 -> portc.0

ausgegeben, und ich habe nur ca 8 takte für die ganze aktion +4 für die 
schleife


Gast #560182
Lesenswert?
• ▲
▼
>also würde es in meinem fall so aussehen

Nach dem Motto warum einfach, wenns auch umständlich geht?
Warum befolgst du nicht unsere Tips, wenn du schon sagst, daß du keine 
Ahnung von Assembler hast? Oder meintest du mit ASM was anderes als 
Assembler?
Gast #560207
Lesenswert?
• ▲
▼
ja würde mich auch mal interessieren.

Es ist wirklich witzig, wie wenig bascom eigentlich mit den registern 
arbeitet. aber warscheinlich macht es wirklich mehr sinn generell alle 
variablen im sram abzulegen

bin mal gespannt ob der code jetzt schnell genug ist? ich kanns erst 
nachher versuchen.  falls nicht, müssen wohl zwei transistoren die daten 
durchgeben :-))
Gast #560231
Lesenswert?
• ▲
▼
Hallo,

>Leider ist der code einen tick zu langsam.

die Frage ist auch, welcher Code ansonsten
noch durchlaufen wird - evtl. liegt es daran,
daß nicht diese paar Takte sondern die 500,
die der Controller sonst noch bearbeitet
das Problem sind....

Gruß Otto
Gast #560233
Lesenswert?
• ▲
▼
Nein. Dieser code wird komplett in einer schleife gefahren. Nichts 
anderes. Im prinzip wandelt mein mega32 daten in ein anderes (neueres) 
format um. Wenn bemerkt wird, dass die daten im alten format kommen (das 
protokoll ist das gleiche, aber die daten nur ca 10% soviel) dann 
wechsel ich auf durchgang bis zum nächsten reboot

@peter: du hast recht. mit einem pin wäre das kürzer für 2 pinne funzt 
das andere kürzer (wenn der sim von bascom nicht mit dem asm überfordert 
ist :-)))

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