mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Berechnungen auf avr 8 bit


Autor: rechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Morgen,

mal ne frage, was geht schneller auf nem avr 8 bit:

unsigned int j=(zahl<<1)-(i<<9);

unsigned int j=(zahl-256*i)*2;

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersteres, da keine Multiplikation...

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne die Aequivalenz der Operationen vorauszusetzen natuerlich 
ersteres...

Autor: Steven () (ovular) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seht doch einfach nach der Anzahl der Operatoren? Das reicht in dem Fall 
schon...

Ich wünsche noch eine angenehme Nacht!
Gruß Ovular

Autor: rechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, danke

macht sinn.
hab ja schon umgeformt ...

wenn man die klammer auflöst steht da ja : 2*j-512*i

Autor: rechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äh,
wenn man die klammer auflöst steht da ja : j= 2*zahl-512*j


so gute nach :)

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind immernoch zwei Multiplikationen Schnuffel :D

Autor: rechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja schon,
aber zahl<<1 ist zahl*2
und  j<<9 ist j*512

mir ist nicht klar ob der compiler oder wer auch immer, nicht auch 
einfach schiebt bei *2, warscheinlich schon oder?

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannste nicht von ausgehen ;)

Autor: G. L. (sprintersb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zweiteres ist schneller, einfach GCC fragen (hier avr-gcc 3.4.6, 
ATmega8, -Os)

:-))
unsigned int foo1 (unsigned int zahl, unsigned int i)
{
    return (zahl<<1)-(i<<9);
}    

unsigned int foo2 (unsigned int zahl, unsigned int i)
{
    return (zahl-256*i)*2;
}    
foo1:
  movw r18,r22   ;  i, i   ;  4  *movhi/1  [length = 1]
  lsl r24   ;  tmp45   ;  31  *ashlhi3_const/2  [length = 2]
  rol r25   ;  tmp45
  mov r19,r18   ;  i   ;  30  *ashlhi3_const/5  [length = 3]
  clr r18   ;  i
  lsl r19   ;  i
  sub r24,r18   ;  <result>, i   ;  22  subhi3/1  [length = 2]
  sbc r25,r19   ;  <result>, i
  ret
/* function foo1 size 9 (8) */

foo2:
  movw r18,r22   ;  i, i   ;  4  *movhi/1  [length = 1]
  mov r19,r18   ;  tmp45, i   ;  33  *ashlhi3_const/3  [length = 2]
  clr r18   ;  tmp45
  sub r24,r18   ;  tmp47, tmp45   ;  14  subhi3/1  [length = 2]
  sbc r25,r19   ;  tmp47, tmp45
  lsl r24   ;  <result>   ;  32  *ashlhi3_const/2  [length = 2]
  rol r25   ;  <result>
  ret
/* function foo2 size 8 (7) */

Kann er aber noch etwas besser (-Os -morder1):
foo2:
  mov r19,r22   ;  tmp45, i   ;  35  *ashlhi3_const/3  [length = 2]
  clr r18   ;  tmp45
  sub r24,r18   ;  zahl, tmp45   ;  14  subhi3/1  [length = 2]
  sbc r25,r19   ;  zahl, tmp45
  lsl r24   ;  <result>   ;  34  *ashlhi3_const/2  [length = 2]
  rol r25   ;  <result>
  ret
/* function foo2 size 7 (6) */

Autor: rechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jau, danke.

-Os ist optimiert auf size, aber was ist -morder1 ?

Autor: G. L. (sprintersb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rechner wrote:
> aber was ist -morder1 ?

avr-gcc bietet 2 undokumentierte Optionen, welche die 
Registerallokierung (d.h. Abbildung von pseudo-regs auf hard-regs) 
beeinflussen. Neben der Standard-Rgisterreihenfolge gibt's noch -morder1 
und -morder2 (zumindest in avr-gcc 3.4.x). Wahrscheinlich von Chertikov 
zum Rumexperimentieren?

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.