Aber die MHz geben ja die Taktzeiten vor. Und jede Operation benötigt mind. einen Takt. Also, je mehr MHz, desto kürzer die Taktzeiten, desto schneller die Operation!also, die MHz-Zahl kannste mal ganz schnell vergessen, weil die sagt über die schnelligkeit von rechenoperationen am wenigsten aus.
Und 4MIPS mehr bei 4MHz mehr bekräftigt ja meine Aussage.
Allerdings wären es nicht 4MIPS mehr wenn eine Multipliaktion 2 Takte benötigt, sondern nur 2MIPS mehr im vergleich zu 16MHz.
Bei 16MHz und 2 Takten pro Multiplikation wären also theoretisch 8.000.000 Multiplikationen pro Sekunde möglich. (und somit auch 8MIPS!)
Was deine Rechnung aus dem Beispiel ausbremst ist schonmal die Schleife. Zum einen braucht sie selber auch Zeit zum ausführen. Zum anderen läuft sie bei 10.000.000 was schon um einiges mehr ist als die 8 Bit die der AVR auf einmal verarbeitet. Damit werden schonmal mehr Takte für die Schleife benötigt, als wenn sie nur bis 255 durchlaufen würde. Du kannst N ja mal als Byte deklarieren und den Zeitunschied messen.
Später im Programm wirst du das Problem haben, das du ja nicht nur jedesmal 5*2 rechnen willst. Die Zahlen müssen ja auch erstmal irgendwo herkommen.
WinAVR mag eine Lösung sein. Der Syntax ist ähnlich. Du kannst es dir ja mal runterladen und den Code so eingeben.
Aber wenn du wirklich noch das letzte rausholen willst/musst, wäre es sicherlich besser wenn du dich mehr mit Assembler beschäftigst.
Du kannst ja im Simulator nachvollziehen, welcher Programmschritt wieviele Takte benötigt. Da siehst du dann in Bascom die Schwachstelle und kannst dir überlegen, nur bestimmte Teile in Assembler zu schreiben.
Nach dem ersten Start kurz bevor die Schleife anfängt zu zählen, sind schon 12300 Takte und 0,76875mS vorbei. Die kann man aber kaum beeinflussen. Aber ich denke beim Start kann man mit denen Leben.
Wenn die Schleife erstmal zählt, werden pro Durchgang 53 Takte benötigt. Nur die Multiplikation zeigt bei mir 3 Takte an. Ich denke, das ist annehmbar.
Die restlichen 50 Benötigt also die Schleife.
Wenn N "nur" ein Byte ist, sind es nur noch 19 Takte pro Durchgang. Ein Simples DO - LOOP braucht nur 6 Takte!
So, jetzt hab ich doch deine Arbeit gemacht. Wollte ich eigentlich garnicht![]()
Aber hier sieht man ganz gut, das es nicht drauf ankommt, wie schnell gerechnet wird, sonder der restliche dazugehörige Code auch mit beachtet werden muss.
Dim A As Byte
Dim N As Integer
Do
A = 5 * 2
Incr N
Loop Until N = 10000000
Braucht nur 52 Takte und ist schonmal ein Takt schneller.
Ich gebe zu, ich habe nicht dazu beigetragen, dein Problem zu lösen, aber ich habe es hoffentlich geschafft, klar zu machen, das in diesem Fall nicht die Multiplikation das Problem ist/war.







Zitieren

Lesezeichen