Hallo Community,
ich habe ein Problem mit dem kopieren von einem kleinen Array aus dem Progmem in ein größeres Array im dynamischen Speicher. Ich möchte es gern verstehen.
Auszug aus dem Coding
#define NUM_ELEMENTS(x) (sizeof(x) / sizeof(x[0]))
// servo counter
const int numberOfServos = 12;
const int framesWalkFwd[19][numberOfServos] PROGMEM = { { 9707, 6607, 9000, 5900, 10400, 9000, 7200, 9000, 9800, 9000, 6700, 9000 },
{ 12081, 7946, 9000, 5900, 11871, 9000, 5829, 9000, 9800, 9000, 6700, 9000 },
{ 12357, 8266, 9000, 5900, 12048, 9000, 5652, 9000, 9800, 9000, 6700, 9000 },
...
int currentFrames[32][numberOfServos];
void moveForeward() {
memcpy_P(currentFrames, framesWalkFwd, NUM_ELEMENTS(framesWalkFwd));
for (uint8_t f = 0; f < NUM_ELEMENTS(framesWalkFwd); f++) {
for (uint8_t s = 0; s < numberOfServos; s++) {
// Serial.print((String)f+"#"+currentFrames[f][s] + "#");
// Serial.print(f);Serial.print("|");Serial.print(currentFrames[f][s]);
currentFrames[f][s] = currentFrames[f][s] - 9000;
Serial.print(currentFrames[f][s]);Serial.print("#");
}
Serial.println("");
}
while (1) {};
}
Die serielle Ausgabe ergibt folgendes
707#-2393#0#-3100#1400#0#-1800#0#800#-8960#-9000#-9000#
-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#
-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#-9000#
Ursprünglich hatte ich im Progmem negative Werte. Dazu habe ich gelesen, dass das nicht unterstütz wird. Deshalb habe ich in der Datenquelle 9000 addiert und ziehe sie nach dem kopieren wieder ab.
Egal was ich tue... ab einem Wert stimmen die Werte im dynamischen Speicher einfach nicht mehr. Erst dachte ich, dass das Problem bei späteren Berechnungen liegt (float) denn die Servos machten was sie wollten, aber nicht was sie sollten.
Nun habe ich erkannt, dass das Problem ganz am Anfang liegt, nämlich daran, dass die Werte nicht vollständig aus dem Progmem übernommen werden.
Was ist die Ursache bzw. wo ist mein Denkfehler
Ach ja... es handelt sich um einen Arduino Nano.