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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.