Forum: Mikrocontroller und Digitale Elektronik Huellkurvenberechnung in Floats oder 32Bit-Integern?


von Mike (Gast)


Lesenswert?

Hallo Gemeinde,

ich versuche gerade eine Implementierung eines SID-Chips entsprechend 
der Datenblaetter auf einem Atmega32 (wie sicherlich viele vor mir). Nun 
habe ich ein Performance-Problem bei der Envelope-Berechnung. Da der SID 
mit einem sehr weiten Dauernbereich (2ms-8000ms, resp. 6ms - 24000ms) 
arbeitet, und ich der Kompatibilitaet halber die Registerwerte nicht 
streichen moechte, komme ich bei der Berechnung unguenstiger 
Konstellationen (geringe Lautstaerkeveraenderung ueber sehr lange 
Zeiten) an die Grenzen des 16Bit-Raumes.

Loesen kann ich das Problem, in dem ich in den 32Bit-Zahlenraum gehe. 
Dieses scheint aber bei der Verwendung von mehr als 2 Oszillatoren, 
SPI-Ansteuerung, Huellkurven und einer DDS-Tastrate von 8kHz nicht mehr 
zu klappen. Die Wavetables werden im Ram gehalten und sollten nicht 
allzusehr bremsen.

Weiss einer von euch, wie performant die Verarbeitung von 32Bit Integern 
im Atmega ist? Vielleicht auch im Vergleich zu 16Bit Zahlen? Waehre die 
Verwendung von Float-Multiplikationen letztlich schneller?

Bislang muss der Atmega nur 8- oder 16Bit-Zahlen verarbeiten und eben 3 
32Bit-Multiplikationen pro 1/8000s durchfuehren. Getaktet wird mit 
16MHz.

Ich waere fuer einen Tipp dankbar.


Mit Gruss

Mike

von wrg (Gast)


Lesenswert?

ich geb dir nen tipp. schau dir mal den assembler output von deinem c 
compiler an und teste verschiedene arten der berechnung. im 
assemblercode kannst du dann genau sehen, wie eine 32 bit multiplikation 
aussieht und in etwa abschaetzen um welchen faktor sie langsamer ist als 
die 16er variante

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.