Forum: Mikrocontroller und Digitale Elektronik STM32 Variablen kleiner 32-Bit


von Peter F. (peter_da_steht_er)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

Geschwindigkeitsmäßig macht es IMOH keinen Unterschied.
Aber selbst bei Windows Programmen verwende ich hauptsächlich Datentypen 
die auch wirklich notwendig sind.

von (prx) A. K. (prx)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Irgendwer (Gast)


Lesenswert?

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.

von Lutz H. (luhe)


Lesenswert?

Bei diesen Prozessoren sind Bool Werte interessant gelöst.

von Bernd K. (prof7bit)


Lesenswert?

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.

von 6a66 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.