www.mikrocontroller.net

Forum: Compiler & IDEs Anfängerproblem C


Autor: Tobi84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mir ist nicht ganz klar, warum das nicht funktioniert:


volatile uint8_t pwm_0 = 100;
volatile uint8_t pwm_1 = 100;
volatile uint8_t pwm_2 = 0;
volatile uint8_t pwm_3 = 100;
volatile uint8_t pwm_4 = 100;
volatile uint8_t pwm_5 = 100;
volatile uint8_t pwm_6 = 100;
volatile uint8_t pwm_7 = 100;

volatile uint8_t 
pwm_setting[8]={pwm_0,pwm_1,pwm_2,pwm_3,pwm_4,pwm_5,pwm_6,pwm_7};



Kann mir von euch einer sagen, was ich falsch mache?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobi84 schrieb:
> Kann mir von euch einer sagen, was ich falsch mache?
Unter anderem:
* unvollständige Quelltexte posten
* die Forenregeln nicht lesen (da steht was von C-Code formatieren)
* keine Fehlermeldungen angeben

Ansonsten: Bei mir lässt sich dein Quelltextschnippel anstandslos 
compilieren (gcc und clang).

Autor: Tobi84 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oh sorry für das posting oben!

anbei nochmal richtig.

die Fehlermeldungen sind:

../main.c:32: error: initializer element is not constant

../main.c:32: error: (near initialization for 'pwm_setting[0]')

../main.c:32: error: initializer element is not constant

../main.c:32: error: (near initialization for 'pwm_setting[1]')

Autor: Thomas Weyhrauch (thomas100)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In ANSI-C ist es glaub ich nicht zulässig, Arrays mit Variablen zu 
initialisieren. Mach mal deine pwm_X von "volatile" zu "const" oder 
trage die Werte direkt in die Feldinitialisierung ein.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht doch da: der Wert, mit dem du initalisierst, müsste konstant
sein. Tatsächlich ist es aber eine Variable.

Daß Sven es kann, liegt daran, daß er besser ist, oder daß der gcc
da nicht so pingelig ist in der Voreinstellung.

Autor: Thomas Weyhrauch (thomas100)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven compiliert vermutlich mit den GNU-Erweiterungen. Und mit denen 
gehts wohl.

Autor: Tobi84 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber in der "main" geht es auch nicht.



../main.c:440: error: expected expression before '{' token

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  uint8_t pwm_0 = 100;

>  pwm_setting[8]={pwm_0,pwm_1,pwm_2,pwm_3,pwm_4,pwm_5,pwm_6,pwm_7};

So ein Schwachsinn;) pwm_0 wird nie wieder benutzt.

Also:

  pwm_setting[8]={100,pwm_1,pwm_2,pwm_3,pwm_4,pwm_5,pwm_6,pwm_7};

Restliche pwm_x genauso entsorgen.

Autor: Tobi84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte aber die einzelnen Werte verändern!

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobi84 schrieb:

> volatile uint8_t pwm_0 = 100;

Wenn es nur der Übersicht dient und nicht als Variable
benutzt wird (wie Holger schrieb) besser:

#define  pwm_0     100

Dann wird bei

pwm_setting[8]={pwm_0,pwm_1,pwm_2,pwm_3,pwm_4,pwm_5,pwm_6,pwm_7};

pwm_0 direkt durch die 100 ersetzt.

avr

Autor: Tobi84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, danke für die Hilfe. Ich habs hinbekommen.

kaum mach mans richtig, schon gehts ;-)


DANKE

Autor: us73 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wann einzeln verändern ?
Zur Compilezeit oder zur Laufzeit ?

Zur Compilezeit, dann nimm ein Makro, dann ists konstant und der 
Compiler zufrieden.
so: #define pwm_0 100

Zur Laufzeit: dann greif auf das entspr. Element im array mit Hilfe des 
Indexes zu und verändere es .
so: pwm_setting[0] = 100;
so: pwm_setting[1] = 80;
so: pwm_setting[i] = 23;

Vielleicht noch mehr Informationen, was Du mit der Variablen machen 
willst ???

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Steht doch da: der Wert, mit dem du initalisierst, müsste konstant
> sein. Tatsächlich ist es aber eine Variable.
>
> Daß Sven es kann, liegt daran, daß er besser ist, oder daß der gcc
> da nicht so pingelig ist in der Voreinstellung.

Nö, ich kompilierte strikt ISO-C99-konform. Dass es bei mir 
funktioniert, liegt ganz einfach daran: Da der OT keinen Kontext 
angegeben hat, hab ich mir halt einen ausgedacht. Wenn man Variablen und 
den Vektor lokal macht, funktioniert das ganz unspektakulär...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sagte ich doch: die einen können es, die anderen nicht :-)

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.