Der in vielen Arduinos verwendete ATmega328 ist ein 8-Bit-Mikrocontroller. Dies bedeutet, dass Register 8-Bit sind, der Datenbus 8-Bit ist, die Ports 8-Bit sind. Das System weist einige minimale 16-Bit-Aspekte auf (z. B. einen der Timer), aber fast alles ist 8-Bit.
Daher verarbeiten die meisten Operationen jeweils 8 Bit. Die Arbeit an etwas anderem als 8-Bit (dh 16-Bit- oder 32-Bit-Ganzzahlen und Gleitkommazahlen) erfordert eine Software-Emulation, bei der der Compiler mehrere Anweisungen verwendet, um diese größeren Variablen zu bearbeiten.
8-Bit ist offensichtlich ausreichend, um einen 8-Bit-Port zu adressieren. Es reicht auch aus, mit vielen Schleifenzählern, Rückgabewerten und ASCII-Zeichen umzugehen. Es ist jedoch nicht genug, wenn es um Zahlen geht. Ein vorzeichenbehaftetes 8-Bit-Int (int8_t) kann nur -128 -> +127 darstellen. Unsigned (uint8_t) kann nur 0 -> 255 darstellen.
8-Bit-Ganzzahlen sind ziemlich einschränkend. C / C ++ int muss mindestens -32.678 -> +32.767 darstellen, entspricht also int16_t - der kleinsten Größe, die dies tun wird. Dies ergibt ein gutes Gleichgewicht zwischen Reichweite und Effizienz. Dies ist besonders wichtig, wenn Anfänger lernen - Überlauf ist nicht wirklich etwas, was Nicht-Programmierer verstehen.
Dies hat jedoch Auswirkungen auf die Leistung, da die meisten 16-Bit-Operationen mindestens doppelt so lange dauern wie eine 8-Bit-Operation und doppelt so viele Register verwenden. Dies kann für Sie einen Unterschied machen oder auch nicht.
Viele von uns wechseln zu nativen Typen wie int8_t und uint8_t, da Sie dadurch weitaus mehr Kontrolle haben.
int
4 Bytes auf dem Arduino Due sind. Ashort
wird bei allen vorhandenen Ardunios 2 Byte groß sein, aber ich betone die Ratschläge der anderen,int16_t
oderuint16_t
.