Einzelne Zeile eines Arrays mit memcpy kopieren?

Hallo,

ich würde gerne eine einzelne Zeile eines mehrzeiligen Arrays in ein einzeiliges Array kopieren, es will aber nicht wirklich funktionieren.

byte sc_LED_st[2][6] = { {0,0,0,0,0,0},
                         {0,0,0,0,0,0} };
  
byte anim_LED_st[6] = {0,0,0,0,0,0};

void setup()
{
  memcpy(anim_LED_st, sc_LED_st[1], sizeof(anim_LED_st));
}

Geht dies evtl. gar nicht mit memcpy?

Bitte um Unterstützung.

Gruß Chris

Ich schliesse mich der Meinung von Uwe aus dem anderen Fred an:
mach es mit for-Schleife!
Das ist einfach weniger fehleranfällig wenn du die Arrays direkt ansprichst, als wenn du Speicherbereiche kopierst.
Und funktionieren tut es auch :slight_smile:

Chris72622:
Geht dies evtl. gar nicht mit memcpy?

Natürlich geht das mit memcpy.

Was funktioniert denn nicht?

BTW: Wenn Du immer noch'n Array und noch'n Array deklarierst, dann wird Deinem Programm irgendwann der RAM-Speicher ausgehen, und dann funktioniert wirklich nichts mehr.

Falls es z.B. so ist, dass sich im "großen" Array Konstanten befinden, könnte man diese als PROGMEM-Konstanten im PROGMEM-Flashspeicher anlegen, und dann bei Bedarf vom Flash ins RAM kopieren, um damit zu arbeiten. Der Befehl, um Konstanten vom PROGMEM Flash-Speicher in den RAM-Arbeitsspeicher umzukopieren wäre dann "memcpy_P" statt "memcpy".

Danke Jurs,

ja, im "großen" Array befinden sich Konstanten. Hast Du mir evtl. einen Beispielcode oder einen Link in dem gezeigt wird, wie man Konstanten als PROGMEM-Konstanten im PROGMEM-Flashspeicher anlegt? Ich würde mich dann mal einlesen.

Gruß Chris

Chris72622:
ja, im "großen" Array befinden sich Konstanten. Hast Du mir evtl. einen Beispielcode oder einen Link in dem gezeigt wird, wie man Konstanten als PROGMEM-Konstanten im PROGMEM-Flashspeicher anlegt? Ich würde mich dann mal einlesen.

const byte sc_LED_st[][6] PROGMEM = { 
  {1,2,3,4,5,6},
  {7,8,9,10,11,12},
  {13,14,15,16,17,18},
  };
  
byte anim_LED_st[6] = {0,0,0,0,0,0};

void setup()
{
  Serial.begin(9600);
  memcpy_P(anim_LED_st, sc_LED_st[1], sizeof(anim_LED_st));
  int i;
  for (i=0;i<6;i++) Serial.println(anim_LED_st[i]);
}
  
void loop() {}