Struktur mit externer Variable

Gast #1915656
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?
Gast #1915673
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.
Persönliche Seite #1915685
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.

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