Grüß dich,
du hast das Array für sieben Elemente definiert, fügst aber immer 8 ein.
Das müsste eigentlich zu einem Overflow führen.
Den Tip von Kindergärtner finde ich prima.
Schöne Grüße
Markus Borti schrieb:> du hast das Array für sieben Elemente definiert, fügst aber immer 8 ein.> Das müsste eigentlich zu einem Overflow führen.
Nein, das ist in C schlicht und einfach nicht definiert. Man kann
keine Arrays zuweisen/kopieren.
for(int k = 0; k < 4; k++) ShiftPWM.SetRGB(rgbModus[modus][k], 255, 0, 0);
45
for(int k = 4; k < 8; k++) ShiftPWM.SetRGB(rgbModus[modus][k], 0, 0, 255);
46
}
47
else
48
{
49
for(int k = 0; k < 4; k++) ShiftPWM.SetRGB(rgbModus[modus][k], 0, 0, 255);
50
for(int k = 4; k < 8; k++) ShiftPWM.SetRGB(rgbModus[modus][k], 255, 0, 0);
51
}
52
}
53
else {
54
Serial.print("Falsche Eingabe! Wert '");
55
Serial.print(modus);
56
Serial.println("' darf nicht hoeher '8' sein!");
57
}
58
}
So passt es nun, die Frage ist, warum " static int rgbModus[][8] = {"
nötig ist. Wir hier wieder die Zahl von 1-8 angegeben?
Bei [7] bekomme ich mecker vom Compiler das zuviele Werte vorhanden
sind.
Stefan schrieb:> So passt es nun, die Frage ist, warum " static int rgbModus[][8] = {"> nötig ist. Wir hier wieder die Zahl von 1-8 angegeben?
Ich weiß zwar jetzt nicht genau was du meinst, aber bei der Deklaration
des Arrays wird die Größe angegeben (8 Elemente), die Indizierung geht
aber von 0-7. Wenn du von 1-8 haben willst musst du Basic als
Programmiersprache nehmen ;)
Stefan schrieb:> So passt es nun, die Frage ist, warum " static int rgbModus[][8] = {"> nötig ist. Wir hier wieder die Zahl von 1-8 angegeben?
Jedes der "Unter-Arrays" muss gleich groß sein, und damit C weiß wie
groß, muss man es angeben.
Das "static const" sorgt dafür dass die Daten nicht jedes Mal in den
lokalen Speicher (Stack) kopiert werden müssen, sondern 1x in den Flash
geschrieben werden und von da direkt verwendet.