Grundlagen der Programmiersprache C

In Embedded-Programmen wird eine Variable für den Wert eines 32-Bit-Peripherieregisters oft nicht als unsigned int, sondern als uint32_t aus stdint.h deklariert. Was ist der Hauptgrund dafür?

  1. AWeil uint32_t beim Überschreiten des Maximalwerts nicht auf 0 zurückspringt, sondern beim Maximalwert stehen bleibt (sättigt)
  2. BWeil bei einer als uint32_t deklarierten Variable die Lese- und Schreibzugriffe nicht mehr von der Compiler-Optimierung weggelassen werden
  3. CWeil die Größe von unsigned int von der Implementierung abhängt, uint32_t dagegen als vorzeichenlose Ganzzahl mit genau 32 Bit festgelegt ist
Antwort und Erläuterung anzeigen

Antwort: C. Weil die Größe von unsigned int von der Implementierung abhängt, uint32_t dagegen als vorzeichenlose Ganzzahl mit genau 32 Bit festgelegt ist

uint8_t, uint16_t, uint32_t, int32_t usw. aus stdint.h sind Ganzzahltypen, deren Bitzahl wie im Namen festgelegt ist (Ganzzahltypen fester Breite). unsigned int kann 16 oder 32 Bit groß sein; verwendet man Typen fester Breite, wenn die Breite eines Registers getroffen werden soll oder das Format von Kommunikationsdaten festgelegt wird, ändert sich die Bedeutung auch auf einer anderen CPU nicht. Wie die anderen vorzeichenlosen Ganzzahltypen nimmt uint32_t bei einem Überlauf den Rest der Division durch 2³² an. Damit Lese- und Schreibzugriffe nicht weggelassen werden, wird unabhängig vom Typ volatile hinzugefügt.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Welche Ausgabe erzeugt der obige Code mit einer Division zweier Ganzzahlen bei der Ausführung?
  2. Welche Ausgabe erzeugt der obige Code mit Präfix- und Postfix-++ bei der Ausführung?
  3. Welche Ausgabe erzeugt der obige Code, in dessen if-Bedingung = steht, bei der Ausführung?
  4. Der obige Code soll prüfen, ob Bit 2 des Registerwerts reg gleich 1 ist. Was ergibt die Ausführung?
  5. uint8_t ist ein vorzeichenloser 8-Bit-Ganzzahltyp. Welche Ausgabe erzeugt der obige Code bei der Ausführung?