PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : int24_t und uint24_t



PasstScho
19.02.2006, 22:45
Hallo,
warum gibts bei avrgcc eigentlich kein int24_t und uint24_t?
Wäre aus Performancegründen doch ganz praktisch oder würde das sich nicht lohnen und ich sollte einfach die 32er nehmen?

SprinterSB
20.02.2006, 08:21
24-Bit-Typen gibt es nicht.
Nimm die (unsigned) long bzw. (u)int32_t.

Wenn es wirklich kritisch von der Effizienz wird, kannst du auch selber einen 24-Bit-Typ definieren, musst dann aber auch Funktionen schreiben, die entsprechend effizient damit umgehen können.

Von der Register-Verwaltung her sind 4-Byte-Typen besser zu handhaben als 3-Byte-Typen, möglicherweise wird's sogar ineffizienter, was die Register-Handhabung angeht.

PasstScho
20.02.2006, 14:40
Servus

Von der Register-Verwaltung her sind 4-Byte-Typen besser zu handhaben als 3-Byte-Typen, möglicherweise wird's sogar ineffizienter, was die Register-Handhabung angeht.
Was in die Richtung habe ich mir auch gedacht, nur ich bin mir nich sicher, da ich asm nicht besonders gut kann.
Könnte mal jemand, der asm kann, sicher sagen ob ein 24bit typ im avr schneller ist als ein 32er oder nicht?
MfG Alex

ogni42
20.02.2006, 15:09
Wie sprinter schon sagt: Du musst die Funktionen (Addition, Subtraktion, Mul, ...) selber schreiben. Gleiche Code-Muster voraus gesetzt, geht 24 bit dann schneller als 32bit.

SprinterSB
20.02.2006, 22:27
Wenn du in asm Programmierst bist du auf jeden Fall besser sein als mit 32 Bit -- vorausgesetzt, du programmierst gut ;-)

Für C-Compiler sieht das aber wieder anders aus. Wenn du den als Schnittstelle verwendest, um 3-Byte-Werte zu lesen/speichern, wird's evtl ineffizient. Mach dir doch mal ein uint24_t und guck nach, was der Compiler draus bastelt.


#include <inttypes.h>

typedef struct
{
uint8_t byte[3];
} uint24_t;


Es ist ja auch die Frage, was du Optimieren willst: Laufzeit, SRAM oder Flash-Verbrauch.

PasstScho
21.02.2006, 12:47
HI,
Ich hab momentan leider keine Zeit das zu machen, da ich mich erst wieder in asm einarbeiten müsste, aber mit c werde ich das mal versuchen in nächster zeit.
Am PC macht es natürlich wenig sinn mit mit 24 bit zu rechnen, wenn der prozessor 32 bit unterstützt, aber 8-bit avrs könnte ja Laufzeit, ram und damit auch der flash verbrauch besser werden. :D
.... wenn ich das gemacht habe meld ich mich mal

SprinterSB
21.02.2006, 13:12
Der Flash-Verbrauch wird möglicherweise sogar grösser.
Wenn du nur an irgend einer einzigen Stelle eine 32-Bit-Multiplikation hast (kann in einem ganz anderen Modul sein), wird die Routine natürlich dazugebunden beim Linken und ist eh da. Das 24-Bit-Zeugs kommt dann noch dazu.

Das einzige, was du sparst, ist Laufzeit und RAM, wenn es viele Werte sind.