Portable Datentypen – t-Types

Portable Datentypen – t-Types

Insbesondere bei der Programmierung von Micro-Controllern ist es sinnvoll, Variablendeklarationen so zu gestalten, dass man seinen Code einfach von einer Plattform zur nächsten portieren kann. Eine als int deklarierte Variable ist nämlich nicht auf allen Systemen gleich. Z.B. nimmt diese auf einem Arduino (ATMega) 16 byte Speicherplatz ein, auf einem ESP32 hingegen 32 byte.

D.h. auf einem ESP32 kann ich Werte von -2.147.483.648 bis 2.147.483.647 in einem int speichern, auf dem Arduino hingegen nur von -32.768 to 32.767. Habe ich also ein Programm auf dem ESP32 entwickelt, dass auch z.B. den Wert 32.769 in dieser int Variable speichert, wird dies auf einem Arduino zum Absturz führen.

Für verschiedene Variablentypen könnt Ihr dies mit diesem kleinen Programm ausprobieren:

r

int ≠ int

Unterschiedliche Plattformen erlauben das Speichern unterschiedlich langer Werte.

void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: Serial.println(sizeof(int)); // size in bytes #include Serial.println(INT_MAX); // max value an int can hold }

Das Programm ermittelt den maximalen Wert, den eine Int Variable aufnehmen kann. Wenn Ihr dieses Programm auf einem ATMega328 und anschließend auf einem ESP32 ausführt, werdet Ihr sehen, dass es unterschiedliche Ausgabewerte für MAX_INT gibt.

void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: Serial.println(sizeof(int32_t)); // size in bytes #include Serial.println(INT32_MAX); // max value an int32_t can hold }

Wenn Ihr dieses Programm ausführt, wird es – egal auf welcher Plattform – immer dieselbe Ausgabe liefern. Das liegt daran, dass durch den Typ int32_t klar festgelegt ist, welchen Wertebereich (genauergesagt: wieviel Speicher) die Variable hat.

Die t-Typen sind auch unter dem Begriff „Portable Datentypen“ bekannt.

In der folgenden Tabelle findet Ihr eine Übersicht der verschiedenen portablen Datentypen für Int-Werte.

Die verschiedenen t-Typen.

Name Bytes Range
int8_t 1 -128 .. 127
int16_t 2 -32768 .. 32767
int32_t 4 −2147483648 .. 2147483647
int64_t 8 −9223372036854775808 .. 9223372036854775807
uint8_t 1 0 .. 255
uint16_t 2 0 .. 65535
uint32_t 4 0 .. 4294967295
uint64_t 8 0 .. 18446744073709551615
Willkommen auf Sensorbender.com

Willkommen auf Sensorbender.com

Irgendwann, irgendwie ist das Layout auf meiner alten WordPress Seite durcheinandergekommen. Vermutlich aufgrund zu vieler inkompatibler add-ons.

Anstatt für die wenigen, veröffentlichten Artikel auf die Fehlersuche zu gehen, habe ich mich dafür entschieden, from scratch zu beginnen – und da sind wir.

 

Solltest Du Dich gerade hier herverirren: Ich bin noch dabei am Layout zu „spielen“. Mein Ziel ist es dabei, mit möglichst wenig Aufwand ein übersichtliches und hübsches Design zu erstellen.

 

Anschließend werde ich das eine oder andere Snippet – welches ich für mich als Spiekzettel für diverse Themen rund um die Heimautomation erstellt haben, veröffentlichen.

 

Beste Grüße

Sascha