Dilemma mit structs

Gast #2902517
Lesenswert?

Ich habe ein Frägchen zu folgendem Quellcode:
1
#ifndef RINGBUFFER_DEFINITIONS
2
#define RINGBUFFER_DEFINITIONS
3

4
#include <stdint.h>
5

6
#define BUFFERSIZE 64
7
typedef struct {
8
  uint32_t Zeit;
9
  uint16_t Zaehler_1;
10
  uint16_t Zaehler_2;
11
  uint16_t Zaehler_3;
12
  uint16_t Zaehler_4;
13
} Datenstruktur_Messungen;
14

15
struct tatata {
16
  Datenstruktur_Messungen Messungen[BUFFERSIZE];
17
  uint8_t _read;
18
  uint8_t _write;
19
};
20

21
struct tatata Ringbufferr;
22

23
#endif

Ich möchte einen Ringbuffer realisieren, ich bin dazu analog dem 
Beispiel hier in dem Tutorial vorgeganen. Eine Ausnahme - ich habe zwei 
structs, einmal Datenstruktur_Messungen, dan "tatata" - einfach nur ein 
Schnellname, um was auszuprobieren.

In dem Tutorial ist es so, dass es einfach so ist
1
struct Ringbuffer {
2
     int read;
3
     int write;
4
     int Daten[BUFFERSIZE];
5

6
};

Der Unterschied besteht darin, dass ich meine Daten in einer separaten 
Struktur definieren möchte, da sie etwas komplexer sind und vlt. ändere 
ich später nochmal was, das ginge so besser. Natuerlich könnte ich es so 
machen:
1
struct Ringbuffer {
2
     int read;
3
     int write;
4
     int Zaehler1[BUFFERSIZE];
5
     int Zaehler2[BUFFERSIZE];
6
     ...
7
};

Kann ich das so realisieren wie oben probiert?

Hängt eigentlich im Speicher dann auch der "leere" Prototyp irgendwo und 
blockiert Ressourcen (also dass ich gewissermaßen meine Struktur zweimal 
im Speicher hab, einmal das Original "tatata" und dann meine 
Arbeitskopie Ringbuffer? Oder hängt nur meine Arbeitskopie Ringbuffer im 
Speicher und der Rest ist nicht belegt?
#2902567
Lesenswert?

Anfaenger schrieb:

> Der Unterschied besteht darin, dass ich meine Daten in einer separaten
> Struktur definieren möchte, da sie etwas komplexer sind und vlt. ändere
> ich später nochmal was, das ginge so besser.

Ja, dann mach das auch so.
Selbstverständlich kann man auch aus Strukturen Arrays bauen.

> Kann ich das so realisieren wie oben probiert?

Was sagt dein C Buch dazu?

> Hängt eigentlich im Speicher dann auch der "leere" Prototyp

welcher 'leere Prototyp'.
Es gibt keinen 'leeren Prototyp'.

Das hier
1
typedef struct {
2
  uint32_t Zeit;
3
  uint16_t Zaehler_1;
4
  uint16_t Zaehler_2;
5
  uint16_t Zaehler_3;
6
  uint16_t Zaehler_4;
7
} Datenstruktur_Messungen;

ist die Beschreibung für den Compiler, wie 1 Strukturobjekt aussieht, 
wieviel Speicher es verbraucht und welche Member es hat. Sozusagen der 
Bauplan für den Compiler, den er konsultieren kann, wenn er etwas mit 
den Internals eines Strukturobjekt machen muss.

So wie bei einem Haus. Der Architekt zeichnet einen Plan. Der Maurer 
baut das Haus anhand des Plans. Aber für den Plan musst du keinen 
Baugrund kaufen. Das hier ist der "Plan" für den Compiler.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren