Array Werte überspringen

Hi alle zusammen,
ich habe folgendes Problem da ich in meinem Programm Platz schaffen muss weil der RAM knapp wird versuche ich gerade etwas zu optimieren.

Ich habe ein Array mit 516 byte Inhalt das ich aus meinem Sensor auslese.
Davon sind 4 byte unnötig und ich versuche diese zu überspringen.
Die Position der bytes im Array die ich überspringen will sind wie folgt angeordnet: Vij[0],Vij[129],Vij[258],Vij[387].
Die Herausforderung ist das ich am Schluss dann aus meinem Vij[516] Array ein Vij[512] Array bekomme, sprich mein Ursprungsarray einfach überschreibe mit der neuen kürzeren Zahlenfolge.
Ich hoffe ihr konntet mir soweit folgen?

void Thermal_Offset_Vij_comp_calc() {
  unsigned short Vij[516];
  
  unsigned short *ptr0,*ptr1,*ptr2,*ptr3;
for (i=0; i < 516; i++){
 Serial.println(Vij[i],HEX);
}

ptr0=&Vij[1];
ptr1=&Vij[129];
ptr2=&Vij[258];
ptr3=&Vij[385];
 for (a = 0; a < 128; a++) 
  {
 
  Vij[a]=*(ptr0+a);
  Vij[a+130]=*(ptr1+a);
  Vij[a+256]=*(ptr2+a);
  Vij[a+384]=*(ptr3+a);

  }
  Serial.println("");
  Serial.println("");
for (i=0; i < 512; i++)
  {
    Serial.println(Vij[i],HEX);
  }

}

ich habe das ganze mit pointern versucht zu realisieren aber das ganze funktioniert leider nicht da es immer beim 129 Wert zu einem doppelten Wert kommt.
Hat jemand eine Idee wie ich das besser realisieren kann oder was ich falsch mache

Vielen dank schon mal für die Hilfe

Gruß beni

Für die paar Byte die Du im Array sparst verbraucht Du andere für das ganze rundherum.

Nimm einen Arduino MEGA2560. Oder überdenke den ganzen Sketch.

Grüße Uwe

so einfach ist das leider nicht da ich mit dem Array noch mehrer Berechnungen tätigen muss verbraucht es extrem viel Platz und ich habe schon den Mega ^^.
Ich habe überhaupt schon den ganzen sketch an allen Enden gekürzt es ist ein Thermpoile Array 32x32 welches ich auslese dies sprengt so gut wie alle Kapazitäten ich arbeite bereits nur mit der Hälfte der Daten deshalb auch nur 512 byte und keine 1024.

Gibt es sonst noch irgend eine Anregung ?

ich habe nochmals einen Beispiel Sketch mit konkreten Werten gemacht in kurz ^^
dabei sollten am schluss im arrai die 5, die 6, die 7 und die 8 aus dem arrai verschwinden.

uint16_t   arrai[48] ={5,10,11,12,13,14,15,16,17,18,19,20,6,30,31,32,33,34,35,36,37,38,39,40,7,50,51,52,53,54,55,56,57,58,59,60,8,70,71,72,73,74,75,76,77,78,79,80};

void array_ubergabe(){
unsigned short *ptr0,*ptr1,*ptr2,*ptr3;
for (int i=0; i < 48; i++)
  {
    Serial.println(arrai[i],DEC);
  }
ptr0=&arrai[1];
ptr1=&arrai[13];
ptr2=&arrai[25];
ptr3=&arrai[38];
 for (int a = 0; a < 12; a++) 
  {
 
  arrai[a]=*(ptr0+a);
  arrai[a+13]=*(ptr1+a);
  arrai[a+25]=*(ptr2+a);
  arrai[a+38]=*(ptr3+a);

  }
  Serial.println("");
  Serial.println("");
for (int i=0; i < 44; i++)
  {
    Serial.println(arrai[i],DEC);
  }
  
  
}
void setup() {
Serial.begin(250000);
array_ubergabe();
}

void loop() {
  

}

Gruß Beni

Die Herausforderung ist das ich am Schluss dann aus meinem Vij[516] Array ein Vij[512] Array bekomme, sprich mein Ursprungsarray einfach überschreibe mit der neuen kürzeren Zahlenfolge.

Du möchtest also dynamische Speicherverwaltung betreiben?
Ob das eine gute Idee ist, möchte ich bezweifeln.

Ansonsten:
memcpy() kann Speicherbereiche kopieren, und damit auch Arrayinhalte verlagern.

Na ja, wenn ich mir die Daten im Beispiel-Sketch ansehe... bleiben die dort hinterlegten Werte immer unterhalb 256. Ist das auch im vollständigen Sketch so? Dann bietet sich für mich an, das int-Array als byte-Array zu betreiben. Dadurch sparst du die Hälfte der tatsächlich belegten Bytes. Wie Uwe schon sagte: Überdenke mal deinen Sketch - vielleicht kannst du hierdurch eine Menge Platz sparen?!

benji1089:
so einfach ist das leider nicht da ich mit dem Array noch mehrer Berechnungen tätigen muss verbraucht es extrem viel Platz und ich habe schon den Mega ^^.
Ich habe überhaupt schon den ganzen sketch an allen Enden gekürzt es ist ein Thermpoile Array 32x32 welches ich auslese dies sprengt so gut wie alle Kapazitäten ich arbeite bereits nur mit der Hälfte der Daten deshalb auch nur 512 byte und keine 1024.

Gibt es sonst noch irgend eine Anregung ?

Wenn Du Dein Projekt nicht anders programmieren kannst ( ganz anders an den Programmablauf herangehen kannst) und Du nicht signifikant Speicherplatz sparen kannst (ich rede jetzt nicht von 4 oder 8 Byte) dann ist die Platform Arduino UNO oder MEGA ungeeignet.

Der Mega kann einen RAMbaustein einblenden : Extended RAM

Du könntest auf einen Arduino DUE oder Teensy 3.x ausweichen falls es die hier nicht näher beleuchteten Umstände zulassen.

Grüße Uwe

also meine Daten sind größer als die im Beispiel und mit dem Due habe ich es bereits versucht.
Einen Ram Baustein habe ich auch bestellt der kommt noch aber wenn ich durch das kopieren noch etwas mehr Ram sparen kann langt es mir für meine Zwecke.
Habe bereits alle register gezogen PROGMEM etc. natürlich würde eine andere programmier weise sprich mehr pointer Objektorientiert etc mich auch dahin bringen aber das Memcpy funktioniert bereits danke dir combie.
Das ich da nicht selbst darauf gekommen bin mit memcpy hab es bereits auch schon benutzt.
warum sollte das Probleme machen ?

Danke für die Hilfe
Gruß Beni