Forum: Mikrocontroller und Digitale Elektronik Struktur mit externer Variable


von Lemi (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Problem mit einer Struktur. Die neuen Werte werden 
zwar in die Struktur übernommen, allerdings bleibt das extern global 
definierte Array leer.
Die Struktur wird später noch vergrößert, geplant sind ca. 1000 
unterschiedliche Parameter und um die 10 Felder.

Hier mal mein Code:
1
extern unsigned int newValue[MAX]; //definiert in global.h
2
3
4
struct
5
{
6
  unsigned int min;
7
  unsigned int max;  
8
  unsigned int value;
9
}
10
table = {
11
  {  0,   300, newValue[0]},
12
  {  1,    10, newValue[1]},
13
  {  0, 32767, newValue[2]},
14
  {100,  1000, newValue[3]}
15
  };
16
17
18
19
void CheckIt(unsigned int id, unsigned int val)
20
{
21
  if (val >= table[id].min && val <= table[id].max)
22
  {
23
    table[id].value = val;
24
  }
25
}

Kann mir bitte jemand einen Denkanstoß geben?

von Klaus W. (mfgkw)


Lesenswert?

Ich jedenfalls nicht, weil ich keine Ahnung habe, was du vorhast
und was du dir erwartest.
Außerdem macht das Programm einen etwas lückenhaften Eindruck,
ebenso wie die Beschreibung, was es machen soll.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Welche Sprache soll das sein? C?

Du willst doch nicht behaupten, daß dein C-Compiler das ohne Fehler 
compilert?

von Lemi (Gast)


Lesenswert?

Ich lese über die serielle Schnittstelle Daten von einem PC ein. Diese 
Daten haben unterschiedliche min und max Werte, sowie noch andere 
Parameter. Die habe ich aber zum Testen erstmal rausgelassen.
Die min und max Prüfung wird nach dem Empfang der Daten ausgeführt und 
da ich die Struktur nicht dauerhaft im Speicher haben will, sollen die 
aktuellen Daten in ein globales Array ausgelagert werden. Aus diesem 
Array werden andere Funktionen usw. gefüttert.

von Lemi (Gast)


Lesenswert?

ja C, das Code-Fragment stammt nicht aus dem Source-Code. Den habe ich 
im Moment nicht hier. Habe das Ganze aus dem Kopf schnell 
aufgeschrieben.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

I. table muss ein Array of Struct sein, es ist nur ein Struct

II. Statische Initializer müssen konstant sein, sind sie hier aber 
nicht. Auch für "extern const unsigned int newValue" kann das nicht 
gehen.

Du willst sowas?
1
extern unsigned int newValue[MAX]; //definiert in global.h
2
3
struct
4
{
5
    unsigned int min;
6
    unsigned int max;  
7
    unsigned int * pvalue;
8
}
9
table[] = 
10
{
11
    {  0,   300, &newValue[0]} ,
12
    {  1,    10, &newValue[1]} ,
13
    {  0, 32767, &newValue[2]} ,
14
    {100,  1000, &newValue[3]}
15
};
16
17
void CheckIt(unsigned int id, unsigned int val)
18
{
19
    if (val >= table[id].min && val <= table[id].max)
20
    {
21
        *(table[id].pvalue) = val;
22
    }
23
}

Möglicherweise table als "static const ..." wenn es nicht global 
sichtbar sein soll und die Werte sich nicht ändern wie im Beispiel.

von Lemi (Gast)


Lesenswert?

Super, vielen Dank! Das funktioniert.

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.