Nö, wie kommst Du da drauf. Das man mit Bitschieben schneller sein könnte ist klar, aber Bascom nimmt wohl immer den selben Rechenalgorithmus also dauert ein / 16 auch 111 Takte!Zitat von Gock
Dass es durch zb 16 schneller geht ist klar, oder?
Nö, wie kommst Du da drauf. Das man mit Bitschieben schneller sein könnte ist klar, aber Bascom nimmt wohl immer den selben Rechenalgorithmus also dauert ein / 16 auch 111 Takte!Zitat von Gock
Nein, das wird wahrscheinlich nicht 111 Takte dauern sondern etwas weniger, weil in 16 ein bit weniger 1 ist als in 18.
MfG Mark
EDIT-------------------
Doch nicht. Bascom rechnet anscheinend anders als ich es vermutet habe.
Selbst ein / 2 (was in Assembler ein Takt is \Zitat von p_mork
/ ) dauert 111 Takte! Wenn Du es nicht glaubst versuche es selber.
yo, dass ist doch scheisse wenn man sachen programmieren will, die fix gehen müssenschade dasses keine AVR's mit 40 MHz gibt ;D
Also dass Bascom derart ineffizient ist, war mir neu.
Ein weiterer Grund es nicht zu verwenden, was ich ja auch nicht tue. Aber man kann halt nicht alles haben...
Gruß
Bascom ist ineffizient, da immer vom Ram gelesen wird und nicht mit Registern gearbeitet wird. Ich fand den Codevergleich Artikel im Wiki sehr interessant. Sollte man sich mal anschauen.
https://www.roboternetz.de/wissen/in...h_AVR-Compiler
Anmerkung: GCC4 ist nochmals 2 Stufen effizenter.
111 Takte ?Dim A As Byte
Dim B As Byte
A = 245
B = 18
A = A / B
End
Jeder Kompiler sollte erkennen, daß es sich um konstante Werte handelt und alles zu Kompilierzeit berechnen, wenn man z.B. A an ein Port übergeben möchte, müsste das ganze 1 Takt dauern.
Kein Wunder, daß die Bascomer Megas32 mit 16 MHz brauchen und sich sogar 40 MHz wünschen![]()
Linus TorvaldSoftware is like s e x: its better when its free.
Wenn Bascom richtig schlau wäre wurde es eine leeren Code erzeugen da das Programm ne Berechnung macht die nie verwendet wirdZitat von izaseba
P.S. Bei A = 4 / 2 dauerts nur 3 Takte also ist der Kompiler nicht ganz dumm!
Deswegen hab ich ja das Beispiel mit Portausgabe gemachtWenn Bascom richtig schlau wäre wurde es eine leeren Code erzeugen da das Programm ne Berechnung macht die nie verwendet wird
Hmm, Register mit 4 laden -> 1 TaktA = 4 / 2 dauerts nur 3 Takte also ist der Kompiler nicht ganz dumm!
Shift nach rechts -> 1 Takt
Register in SRAM Speichern -> 2 Takte
P.S.
Ich weiß schon, der ist wirklich schlau ! 4/2 macht der wahrscheinlich doch zu kompilierzeit also
Register mit 2 laden -> 1 Takt
Register in SRAM Speichern -> 2 Takte
Also ganz klever der Kerl !!!
Linus TorvaldSoftware is like s e x: its better when its free.
Lesezeichen