Hi zusammen,
ich habe für meinen 8x8x8 LED Würfel ein schönes Programm mit Bit Angle
Modulation (JUHUU!!) geschrieben, allerdings machen mir manchen Zeilen
Kummer, da sie >10 Zyklen brauchen.
Ausschnittsweise:
Max TBA schrieb:> allerdings machen mir manchen Zeilen> Kummer, da sie >10 Zyklen brauchen.
Und?
Gibts zeitliche Probleme? Hast du festgestellt, dass genau diese Zeile
der Flaschenhals ist? Wastutdas restliche Programm?
Bedenke:
"Premature optimization is the root of all evil." :-)
Ja, es gibt zeitliche Probleme dahingehend, dass ich BMP momentan nur
(und schon knapp an der Grenze) mit 7 statt 8 Bit laufen lasse, und die
USB-Implementation und -Datenübertragung noch vollkommen fehlt. Mal
sehen, wie viel das noch in Anspruch nimmt.
Diese Zeile wird bei jedem Interrupt 8 mal (for Schleife über den
mittleren Index) ausgeführt und braucht daher schon fast 250 Zyklen.
Wie macht man das mit einem Pointer schneller?
Schöne Grüße, Max
@gjlayde
Naja, es sind wie gesagt nur Ausschnitte, daher die Fehler. Ich kann
leider kein ASM, deswegen verstehe ich nicht ganz was du mir sagten
willst.
Ausserdem sehe ich gerade leider, dass ich wahrscheinlich im falschen
Forum bin, da ich mit AVR Studio 6 arbeite. Sorry!
BAM würde ich sowieso in Assembler schreiben. Dann geht das auch locker
mit 8bit. --> http://www.mikrocontroller.net/articles/AVR-TutorialMax TBA schrieb:> Wie macht man das mit einem Pointer schneller?
Das versteht man am Besten wenn man AVR-Assembler kann und die Befehle
des µC kennt. Die meisten Assembler-Befehle deiner Funktion werden
gebraucht um die Speicheradresse deines Arrayindex' auszurechnen. Mit
einem Pointer entfällt das.
Max TBA schrieb:> Ausserdem sehe ich gerade leider, dass ich wahrscheinlich im falschen> Forum bin, da ich mit AVR Studio 6 arbeite. Sorry!
Was glaubst mit welchem Compiler Atmel Studio 6 arbeitet?
Ja schrieb:> BAM würde ich sowieso in Assembler schreiben.
Bringt das so viel Zeitersparnis, dass es sich lohnt dafür Assembler zu
lernen?
Ich werde das mal mit Pointern versuchen und sehen wis läuft.
Danke schonmal für die Hilfe! =)
Max
Ja schrieb:> Die meisten Assembler-Befehle deiner Funktion werden> gebraucht um die Speicheradresse deines Arrayindex' auszurechnen. Mit> einem Pointer entfällt das.
Hm. Wie berechnest du den Pointer, und vor allem, warum sollte das dann
weniger Assembler-Befehle benötigen?
Oliver
Ich habe mein 3D-Array so eingerichtet, dass ich den Pointer auf den
ersten Wert setze, und dann bei jedem Zugriff nur den Pointer eins
weiterschiebe und auf dem gewünschten Wert lande. Ich muss dabei nur ein
einziges mal, nach jedem vollständigen Zyklus über alle 8x8x8 Werte den
Zeiger auf einen diskreten Wert, das erste Element im Array, setzen.
Klappt jedenfalls ganz gut. Muss aber heute abend nochmal genauer
testen.
Grüße,
Max