User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
4.4.4. Variablen
Erstmal fangen wir aber damit an, wie wir denn überhaupt Daten im Arbeitsspeicher
ablegen und auslesen können. Das geht mit Variablen. Es gibt in C verschiedene Arten
von Variablen - sog. Datentypen. Grundsätzlich sind dies 8, 16 oder 32Bit große,
ganzzahlige Datentypen, die entweder mit oder ohne Vorzeichen verwendet werden
können. Wieviel "Bit" eine Variable haben muss, hängt davon ab wie groß die Zahlen
sind (Wertebereich), die darin gespeichert werden sollen.
Beim RP6 verwenden wir folgende Datentypen:
Typ Alternative Wertebereich Bemerkung
signed char int8_t 8 Bit: -128 ... +127 1 Byte
char uint8_t 8 Bit: 0 ... 255 '' vorzeichenlos
int int16_t 16 Bit: -32768 ... +32767 2 Bytes
unsigned int uint16_t 16 Bit: 0 ... 65535 '' vorzeichenlos
long int32_t 32 Bit: –2147483648 ... +2147483647 4 Bytes
unsinged long uint32_t 32 Bit: 0 ... 4294967295 '' vorzeichenlos
Da insbesondere der Datentyp „int“ auf verschiedenen Plattformen nicht standardisiert
ist und z.B. auf unserem Mikrocontroller 16 bit, auf PCs aber 32 bit groß ist, verwen-
den wir die neuere standardisierte Bezeichnung: int16_t
Diese Datentypen ist immer so aufgebaut: [u] int N _t
u : unsigned (kein Vorzeichen)
int : Integer (ganze Zahl)
N : Anzahl der Bits, z.B. 8, 16, 32 oder 64
_t : t wie „type“ um Verwechslungen mit anderen Bezeichnern auszuschließen.
Auf einem Mikrocontroller kommt es oft auf jedes Byte Speicherplatz an, daher behält
man mit dieser Bezeichnung auch besser den Überblick. Man sieht der Bezeichnung
sofort an, dass es sich um einen 16bit Datentyp handeln muss (wegen der 16 im Na-
men). Steht noch ein „u“ davor, handelt es sich um einen „unsigned“ also vorzeichen-
losen Datentyp. Sonst ist der Datentyp „signed“ also vorzeichenbehaftet.
Das wurde oben in der Tabelle aber nur bei „signed char“ hinge-
schrieben, denn int und long sind standardmäßig vorzeichenbehaftet
und nur char ist standardmäßig vorzeichenlos - auch wenn man es
nicht explizit hinschreibt. Das resultiert aus einer Compileroption die
wir verwenden und die auch fast immer beim AVR-GCC aktiviert ist.
Bei Strings (=Engl. für Zeichenketten) wird auch weiterhin „char“ ge-
nutzt da sonst wegen der Definition von uint8_t ein paar Dinge aus
der C Standard Bibliothek nicht damit kompatibel wären und es oh-
nehin logischer ist, hierfür den Datentyp char (=Engl. für „Zeichen“)
zu verwenden. Das wird im Kapitel über die RP6Library bei Textaus-
gabe über die serielle Schnittstelle noch etwas genauer behandelt.
Also merken wir uns einfach: Bei Zeichen und Zeichenketten immer
„char“ verwenden, bei Zahlenwerten immer uintN_t oder intN_t!
- 67 -