MINT üben

Speicher und Adressen

Eine Sensorbox zeigt, wo ihre Messwerte im Speicher liegen, und ein Vokabeltrainer stürzt ab, weil scanf eine Adresse statt eines Werts braucht.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die Sensorbox im Klassenraum

AFB I–II

Die Informatik-AG baut eine Sensorbox, die im Raum B die Temperatur und den CO2-Gehalt der Luft misst. Luca möchte wissen, wie die Messwerte im Arbeitsspeicher liegen. Er schreibt ein kleines Testprogramm (%zu ist die passende Formatangabe für Werte von sizeof) und startet es zweimal hintereinander.

C · sensorbox.c
#include <stdio.h>

int main(void) {
    char raum = 'B';
    int co2 = 812;           // CO2-Gehalt in ppm
    double temp = 21.5;      // Temperatur in °C

    printf("Groessen: %zu %zu %zu\n", sizeof(raum), sizeof(co2), sizeof(temp));
    printf("raum: %p\n", &raum);
    printf("co2:  %p\n", &co2);
    printf("temp: %p\n", &temp);
    return 0;
}
Konsole · zwei Programmstarts
$ ./sensorbox
Groessen: 1 4 8
raum: 0x7fff2078549b
co2:  0x7fff2078549c
temp: 0x7fff207854a0
$ ./sensorbox
Groessen: 1 4 8
raum: 0x7fffc795752b
co2:  0x7fffc795752c
temp: 0x7fffc7957530

Für den Unterricht hat Luca die Lage der drei Variablen mit vereinfachten Adressen skizziert (siehe Abbildung). Später soll die Box einen Schultag lang (7 Stunden) alle 10 Minuten einen Temperatur- und einen CO2-Wert speichern. Auf dem Mikrocontroller der Box stehen dafür 2048 Byte zur Verfügung.

Lucas Skizze: Speicher der Sensorbox (vereinfachte Adressen)
0x20000x20010x20020x20030x20040x20050x20060x20070x20080x20090x200A0x200B0x200C0x200D0x200E0x200F'B'raumco2tempandere Daten
Jedes Kästchen ist ein Byte; unter jedem Kästchen steht seine Adresse.
  1. Lesen Sie aus der Skizze die Adressen &raum, &co2 und &temp, die Anzahl der Bytes jeder Variable und die Adresse des letzten Bytes von temp ab.
  2. Berechnen Sie den Speicherbedarf der Messwerte für einen Schultag und für eine Schulwoche (5 Tage), wenn die Größen aus dem Testlauf gelten. Prüfen Sie, ob eine Woche in die 2048 Byte passt, und berechnen Sie den Bedarf erneut für den Fall, dass die Temperatur als float (4 Byte) gespeichert wird.
  3. Interpretieren Sie die Ausgabe der beiden Programmstarts: Was ändert sich, was bleibt gleich, und was bedeutet das?

Hinweise

Hinweis zu Aufgabe a)
Die Adresse einer Variable ist die Adresse ihres ersten Bytes. Zählen Sie die Kästchen jeder Farbe.
Hinweis zu Aufgabe b)
Wie viele Messzeitpunkte hat eine Stunde, wie viele ein Tag mit 7 Stunden? Jeder Messzeitpunkt braucht einen double und einen int.
Hinweis zu Aufgabe c)
Rechnen Sie in Hexadezimal: Wie weit liegen co2 und temp jeweils von raum entfernt? Vergleichen Sie diese Abstände mit den Größen aus der ersten Zeile.„Interpretieren“ heißt: die Zahlen auf die Sache beziehen und in Worten sagen, was sie bedeuten.