Forum: Mikrocontroller und Digitale Elektronik Arduino: Initialisierung eines array funktioniert nicht.


von Hustle (Gast)


Lesenswert?

Ich deklariere und initialsiere eine int zahl1 und int feld1[5] jeweils 
in einem Befehl ohne Probleme. Jetzt möchte ich für die gleichen 
Variablentypen die Deklaration und Initialisierung trennen. Für int 
zahl2 funktioniert das problemlos. Für int feld2[5] funktioniert nur die 
Deklaration. Folglich compiliert der unten angegebene Code erfolgreich.

Bei der von der Deklaration getrennten Initialisierung für feld2[] ist 
das nicht mehr der Fall: Entferne ich in der auskommentierten Zeile die 
"//" gibt es dort die Fehlermeldung "expected primary-expression before 
']' token".

Was mache ich falsch?
1
int zahl1 = 5;
2
int zahl2;
3
4
int feld1[5] = {18, 39, 42, 25, 69}; 
5
int feld2[5];
6
7
void setup() {
8
zahl2 = 5;
9
10
//feld2[] = {18, 39, 42, 25, 69};
11
}
12
13
void loop() {
14
}

: Verschoben durch User
von nicht"Gast" (Gast)


Lesenswert?

Wenn du es separat machen willst, ist das keine Initialisieruung mehr, 
sondern eine Zuweisung.


Das geht dann bei einem Array nicht mehr so einfach.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Geht es um AVR- oder ARM-Arduino?

von Ingo Less (Gast)


Lesenswert?

Niklas G. schrieb:
> Geht es um AVR- oder ARM-Arduino?
Jetzt muss ich mal ganz dumm fragen, ob es da einen Unterschied gibt 
bezüglich der Frage des TO?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ingo Less schrieb:
> Jetzt muss ich mal ganz dumm fragen, ob es da einen Unterschied gibt
> bezüglich der Frage des TO?

Ja, denn bei AVR braucht es PROGMEM und memcpy_P und der AVR-GCC hat 
keine vollständige C++ Standard Library.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Was geht ist z.B.
1
#include <string.h>
2
3
int feld2[5];
4
5
void set_feld2 (void)
6
{
7
    memcpy (feld2, (const int[]) { 18, 39, 42, 25, 69 }, sizeof (feld2));
8
}

Und ja, das geht auch mit avr-gcc / avr-g++.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Johann L. schrieb:
> Und ja, das geht auch mit avr-gcc / avr-g++.

Landet das Array denn dann im Flash? Wenn der Code das erst in den RAM 
kopiert und dann nach feld2...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Johann L. schrieb:
>> Und ja, das geht auch mit avr-gcc / avr-g++.
>
> Landet das Array denn dann im Flash?

Das hängt vom Device ab.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Johann L. schrieb:
> memcpy (feld2, (const int[]) { 18, 39, 42, 25, 69 }, sizeof (feld2));

Das Compound-Literal gibt es strenggenommen nur in C, nicht aber in C++,
wo es lediglich als GCC-spezifische Spracherweiterung verfügbar ist. In
der Arduino-Welt spielt das aber vermutlich keine Rolle.

von The Mule (Gast)


Lesenswert?

Was hat das mit Arduino zu tun wenn es im gcc enthalten ist? Wenn es 
verfügbar ist, dann ist es verfügbar, dann ist es verfügbar, dann ist es 
verfügbar, dann ist es verfügbar, dann ist es verfügbar, dann ist es 
verfügbar...

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.