-
        

Ergebnis 1 bis 7 von 7

Thema: int24_t und uint24_t

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447

    int24_t und uint24_t

    Anzeige

    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?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    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.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    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.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    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.

    Code:
    #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.
    Disclaimer: none. Sue me.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447
    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.
    .... wenn ich das gemacht habe meld ich mich mal

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    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.
    Disclaimer: none. Sue me.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •