www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik kanns Assembler schneller als Bascom!?


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??


Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian wrote:
> Geht es in assembler schneller??

Ja !

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.


Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
in r16, pind    ;PIND einlesen
in r17, portc   ;PORTC einlesen
lsr r16         ;Zustand von PIND um eine Stelle nach rechts (Bit 2 auf Pos. 1 schieben)
andi r16, 0x02  ;Bit 1 maskieren, alle anderen löschen
andi r17, 0xfd  ;Bit 1 in PORTC-Zustand löschen
or r17, r16     ;Zustand von PIND.2 an Pos. 1 von PORTC
out portc, r17  ;PORTC schreiben
Registernummern nach Verfügbarkeit, aber auf jeden Fall > r16 wg. 
immediate-Operationen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi


    in r16,PinD      ; Port einlesen
    bst r16,2        ; Bit nach T-Flag
    in r16,PinC      ; Port einlesen
    bld r16,4        ; Bit setzen
    out PortC,r16    ; Port ausgeben

   5 Takte

MfG Spess

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also würde es in meinem fall so aussehen
in r16,PinD      ; Port einlesen
in r17,PinC      ; Port einlesen

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

bst r16,6        ; Bit nach T-Flag
bld r17,0        ; Bit setzen
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



Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Michi

1. Hat er doch !!!
2. Welchen Beitrag hast du eigentlich geleistet?????

MfG Spess

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-))

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sbis    pind, 0
cbi     portc, 1
sbic    pind, 0
sbi     portc, 1

Sind nur 4 Worte und 5 Zyklen.


Peter

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.