Forum: Mikrocontroller und Digitale Elektronik Zeitschaltuhr C struct


von Peter F. (peter_da_steht_er)


Lesenswert?

Hallo,
ich programmiere gerade eine Zeitschaltuhr zum Üben. Ich habe den ganzen 
Tag in 32Bit*3 eingeteilt. Da ich zu faul bin für jeden Tag eine neue 
Struct zu definieren, möchte ich gerne von jeden Tag ein "Objekt" von 
der Struktur "zeitschatltuhr_rtc_tag". Sorry ich weiß nicht, wie ich 
mich am besten ausdrücken soll :)

Mein Gedanke:
im global.h File


1
struct zeitschatltuhr_rtc_tag
2
{
3
     uint32_t uhr_0_8;
4
     uint32_t uhr_8_16;
5
     uint32_t uhr_16_24;
6
    
7
};
8
9
extern struct zeitschatltuhr_rtc_tag montag, dienstag, mittwoch;

würde das gehen, oder ist das eine Sache von Java und Co.? Wie rufe ich 
das ganze in einer Funktion auf?

vielen Dank

von Karl H. (kbuchegg)


Lesenswert?

Peter Frun schrieb:

> würde das gehen


Bis jetzt ist da noch nichts falsches, wie dir jedes noch so grindige C 
Buch bestätigen wird.

Allerdings: bis jetzt hast du noch keine Variablen. Mittels 'extern' 
teilst du dem Compiler nur mit: irgendwo, in einem anderen C File gibt 
es derartige Variablen. Wenn ich also diesen Variablennamen, zb. montag, 
benutze dann ist das kein Tippfehler, sondern diese Variable gibt es 
wirklich. Irgenwo anders.

, oder ist das eine Sache von Java und Co.? Wie rufe ich
> das ganze in einer Funktion auf?


Du meinst, wie du sie benutzt. Variablen kann man nicht aufrufen.
So wie jede andere globale Variable auch.

von Karl H. (kbuchegg)


Lesenswert?


von STK500-Besitzer (Gast)


Lesenswert?

Peter Frun schrieb:
> würde das gehen, oder ist das eine Sache von Java und Co.?
Ja, ist aber umständlich.

> Wie rufe ich
> das ganze in einer Funktion auf?

Besorg dir ein Buch zum Thema "C".

von Karl H. (kbuchegg)


Lesenswert?

Peter Frun schrieb:
> Hallo,
> ich programmiere gerade eine Zeitschaltuhr zum Üben. Ich habe den ganzen
> Tag in 32Bit*3 eingeteilt. Da ich zu faul bin für jeden Tag eine neue
> Struct zu definieren,

Du hast da irgendwas grundsätzlich nicht verstanden.

Mit einer struct definiert man einen neuen Datentyp.
Die Definition einer struct ist wie das Zeichnen eines Bauplans. Die 
Definition zeigt, wie eine Variable von so einem Typ aussehen würde, 
wenn man denn eine anlegt. Mehr nicht. Und genau so, wie man von ein und 
demselben Bauplan nicht nur 1 Haus bauen kann sondern deren hunderte, 
die dann alle gleich aussehen, genauso kann man beliebig viele Variablen 
von genau diesem struct-Typ definieren, wie man sie eben braucht.

Aber nur weil du eine struct definiert hast, hast du noch lange keine 
Variable definiert. Denn: Die struct ist nur der Bauplan, der festlegt, 
wie die innere Struktur einer derartigen Variablen aussehen würde. Aber 
anlegen musst du die Variable schon noch. Und dann ist es eine Variable 
wie jede andere auch.

von Peter F. (peter_da_steht_er)


Lesenswert?

Okey, vielen Dank für die schnellen Antworten.

Ich wäre halt dann so fortgefahren:

File rtc.c
1
#include "global.h"
2
#include "rtc.h"
3
4
struct zeitschatltuhr_rtc_tag montag, dienstag , mittwoch;

von Karl H. (kbuchegg)


Lesenswert?

Peter Frun schrieb:
> Okey, vielen Dank für die schnellen Antworten.
>
> Ich wäre halt dann so fortgefahren:
>
> File rtc.c
>
1
> #include "global.h"
2
> #include "rtc.h"
3
> 
4
> struct zeitschatltuhr_rtc_tag montag, dienstag , mittwoch;
5
> 
6
>


Gut.
Jetzt hast du die 3 Variablen. Da sind sie.

(PS: denk auch mal darüber nach ob du wirklich 3 einzelne benannte 
Variablen brauchst, oder ob es zb nicht auch ein Array von 7 Tagen tun 
würde, mit dem du die ganze Woche abbilden kannst.
1
struct zeitschatltuhr_rtc_tag Tage[7];

Lässt du die Woche zb am Montag beginnen, dann gibt es eben ein
1
   ....
2
   Tage[0].uhr_0_8 = .....

anstelle von
1
   montag.uhr_0_8 = .....

Aber es kommt natürlilch auch darauf an, ob der Rest des Programms von 
einem Array Nutzen ziehen kann oder nicht.

von Peter F. (peter_da_steht_er)


Lesenswert?

Cool vielen herzlichen Dank, das war noch mal ein guter Denkanstoß.

von Bernd (Gast)


Lesenswert?

Jetzt vielleicht noch ein paar Defines, um das ganze leserlicher zu 
machen...
(Wobei das hier ja noch geht)
1
#define MONTAG    0
2
#define DIENSTAG  1
3
...
4
5
Tage[MONTAG].uhr_0_8 = .....

Oder geht das mit einer Enumeration noch schöner?

von Matthias L. (Gast)


Lesenswert?

> Ich habe den ganzen Tag in 32Bit*3 eingeteilt

Was soll das für einen Sinn haben?

von oo (Gast)


Lesenswert?

Also man kann ein "Objekt" als struct betrachten.
Was soll denn die Sprache sein, C oder C++ ?
In beiden kann man ein multiples Array nehmen:
1
int zeit[7][24];
Oder man macht echte Objekte:
1
class time
2
{
3
 private int actualtime;
4
5
 void settime(int time)
6
 {
7
   actualtime = time;
8
 }
9
10
 int gettime()
11
 {
12
   return actualtime;
13
 }
14
}
15
16
class monday
17
{
18
 private time;
19
...
20
setter & getter
21
...
22
}
oder man erbt bei OO:
1
class sunday : public time
2
{
3
// direkter Zugriff auf time usw ...
4
}
Also was soll es sein, C und wenig Speicher oder C++ und mehr Speicher 
aber lesbarer ?
Nimm ein passendes Tutorial aus dem Netz oder ein C/C++ Buch und schau 
nach wie es geht.

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.