Hallo, eine Frage hat es überhaupt einen Sinn, auf einem STM32 eine uint8_t Variable zu verwenden? Ich bin von AVRs umgestiegen und mir tut es ein bisschen weh, wenn ich 32-Bit für eine Variable verwenden muss, deren Wert 200 nie übersteigt. mit freundlichen Grüßen Peter
Geschwindigkeitsmäßig macht es IMOH keinen Unterschied. Aber selbst bei Windows Programmen verwende ich hauptsächlich Datentypen die auch wirklich notwendig sind.
Timmo H. schrieb: > Geschwindigkeitsmäßig macht es keinen Unterschied. Doch. Bei (meist lokalen) Variablen, die ganz oder zeitweilig in Registern landen können, sind Typen unter 32 Bits etwas im Nachteil. uint_fast8_t entspricht daher uint32_t.
Peter Frun schrieb: > hat es überhaupt einen Sinn, auf einem STM32 eine uint8_t > Variable zu verwenden? Für lokale Variablen und wenn Zeit oder Platz im ROM wichtiger ist als Platz im RAM, nimm uint_fast8_t statt uint8_t. Das funktioniert gleichermassen auf AVR und ARM.
Peter Frun schrieb: > auf einem STM32 eine uint8_t > Variable zu verwenden? Sinn macht das wenn man eine ganze Menge davon in eine strukt oder in ein array quetschen will. Bei Einzelwerten kommt es auf den Compiler/Einstellungen drauf an. Ggf. werden diese im Speicher sowieso alle im Speicher mit einem DWord alignment abgelegt um schneller darauf zugreifen zu können. Da spart man am ende garnichts.
Irgendwer schrieb: > Ggf. werden diese im Speicher sowieso alle im Speicher mit einem DWord > alignment abgelegt um schneller darauf zugreifen zu können. Nein, das ist falsch. int8 (oder char) braucht in keinem der heutzutage gängigen ABIs (und auch in keinem anderen) ein größeres Alignment als 1, int16 braucht höchstens 2, int32 braucht höchstens 4, etc. und es ist anzunehmen daß sich daran auch in Zukunft nichts mehr ändern wird. Der Compiler ist also gezwungen int8 bzw uint8 dicht an dicht zu packen.
Peter Frun schrieb: > eine Frage hat es überhaupt einen Sinn, auf einem STM32 eine uint8_t > Variable zu verwenden? Ich denke das ist nicht nur ein Thema der Geschwindigkeit (auch wenn es das nicht wirklich ist) sondern auch ein Thema der Programmstruktur und der Lesbarkeit: "uint8_t Minuten" ist für mich was anderes wie "uint32_t Minuten". rgds
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.