Forum: Mikrocontroller und Digitale Elektronik Dilemma mit structs


von Anfaenger (Gast)


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?

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Anfaenger schrieb:
> dan "tatata" - einfach nur ein Schnellname, um was auszuprobieren.

Hm, ist denn die endgültige Namenssfindung der Struct so aufwändig, daß 
es sich lohnt, dafür einen "Schnell-Namen" zu erfinden?

Und wird dann die Struct mit dem endgültigen Struct-Namen auch genau so 
gut funktionieren ?

Fragen über Fragen ...

von Karl H. (kbuchegg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.