mikrocontroller.net

Forum: Compiler & IDEs Constanten und array


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine kleines Sytaxproblem und stehe scheinbar auf dem Schlauch.
Ich hab mir eine reihe von Konstanten definitert die ich in einen array
reinhauen will (siehe unten). Aber wenn ich das mache bekomme ich eine 
fehlermeldung
die da lautet:
../moveLib.c:65: error: initializer element is not constant
../moveLib.c:65: error: (near initialization for 'forwoard[0][0]')

und das für jedes Element meines arrays. Hat jemand eine Idee?
Schonmal vielen Dank :-)



        const u08 HIPP_1_FRONT=120;
  const u08 HIPP_1_MIDDEL=128;
  const u08 HIPP_1_BACK=140;
  const u08 KNEE_1_UP = 120;
  const u08 KNEE_1_DOWN = 140;

  const u08 HIPP_2_FRONT=120;
  const u08 HIPP_2_MIDDEL=128;
  const u08 HIPP_2_BACK=140;
  const u08 KNEE_2_UP = 120;
  const u08 KNEE_2_DOWN = 140;

  const u08 HIPP_3_FRONT=120;
  const u08 HIPP_3_MIDDEL=128;
  const u08 HIPP_3_BACK=140;
  const u08 KNEE_3_UP = 120;
  const u08 KNEE_3_DOWN = 140;

  const u08 HIPP_4_FRONT=120;
  const u08 HIPP_4_MIDDEL=128;
  const u08 HIPP_4_BACK=140;
  const u08 KNEE_4_UP = 120;
  const u08 KNEE_4_DOWN = 140;

  const u08 HIPP_5_FRONT=120;
  const u08 HIPP_5_MIDDEL=128;
  const u08 HIPP_5_BACK=140;
  const u08 KNEE_5_UP = 120;
  const u08 KNEE_5_DOWN = 140;

  const u08 HIPP_6_FRONT=120;
  const u08 HIPP_6_MIDDEL=128;
  const u08 HIPP_6_BACK=140;
  const u08 KNEE_6_UP = 120;
  const u08 KNEE_6_DOWN = 140;

  const u08 FOOTUP=1;
  const u08 FOOTDOWN=0;








   const u08 forwoard[18][18] ={{KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, 
HIPP_2_FRONT, KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, 
KNEE_5_DOWN, HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                    {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, 
HIPP_2_FRONT, KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, 
KNEE_5_DOWN, HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                    {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, 
HIPP_2_FRONT, KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, 
KNEE_5_DOWN, HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                 {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                   {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN},
                  {KNEE_1_DOWN, HIPP_1_BACK, KNEE_2_DOWN, HIPP_2_FRONT, 
KNEE_3_DOWN, HIPP_3_FRONT, KNEE_4_DOWN, HIPP_4_MIDDEL, KNEE_5_DOWN, 
HIPP_5_MIDDEL, KNEE_6_DOWN, 
HIPP_6_BACK,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN,FOOTDOWN}};

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die Initialisierung der Array-Elemente interessiert es den Compiler 
nicht, dass vor den einzelnen Bezeichnern ein "const" steht. Für den 
sind das Variablennamen wie jeder andere auch, und die kann man in einer 
globalen Initialisierung nicht zuweisen.

Das ganze macht sowieso wenig Sinn, da man solche Sachen dem 
Präprozessor überlässt. Das, was Du da versuchst, würde, wenn es 
funktionieren würde, für jedes Element zweimal den Speicher belegen. 
Wenn Du nur für Deine Zahlen sinnvolle Namen vergeben willst, dann mach 
es mit #define. Dadurch wird wenigstens nicht für die Einzelwerte noch 
extra Speicher belegt. Außerdem gibts dann keine Fehlermeldung mehr.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber wenn ich das mache bekomme ich eine fehlermeldung
> die da lautet:
> ../moveLib.c:65: error: initializer element is not constant
> ../moveLib.c:65: error: (near initialization for 'forwoard[0][0]')
>
> und das für jedes Element meines arrays. Hat jemand eine Idee?

Ja. Es sind keine Konstanten. Eine Variable, die const ist, ist keine 
Konstante. In C++ wäre das anders.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke für die Tipps.
Ich werd define benutzen :-)

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.