mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Struktur mit externer Variable


Autor: Lemi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
extern unsigned int newValue[MAX]; //definiert in global.h


struct
{
  unsigned int min;
  unsigned int max;  
  unsigned int value;
}
table = {
  {  0,   300, newValue[0]},
  {  1,    10, newValue[1]},
  {  0, 32767, newValue[2]},
  {100,  1000, newValue[3]}
  };



void CheckIt(unsigned int id, unsigned int val)
{
  if (val >= table[id].min && val <= table[id].max)
  {
    table[id].value = val;
  }
}

Kann mir bitte jemand einen Denkanstoß geben?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Sprache soll das sein? C?

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

Autor: Lemi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lemi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?
extern unsigned int newValue[MAX]; //definiert in global.h

struct
{
    unsigned int min;
    unsigned int max;  
    unsigned int * pvalue;
}
table[] = 
{
    {  0,   300, &newValue[0]} ,
    {  1,    10, &newValue[1]} ,
    {  0, 32767, &newValue[2]} ,
    {100,  1000, &newValue[3]}
};

void CheckIt(unsigned int id, unsigned int val)
{
    if (val >= table[id].min && val <= table[id].max)
    {
        *(table[id].pvalue) = val;
    }
}

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

Autor: Lemi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, vielen Dank! Das funktioniert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.