m_ri:
a occhio direi che il compilatore ignora il vettore2..tieni conto che nelle ottimizzazioni elimina variabili/array e funzioni non utilizzate,può cancellare di brutto i for e tante altre cose...
e te dichiari vettori non utilizzati..
Si ok ma come vedi nella funzione ho sia scritto nel vettore2 ed anche stampato, e il risultato non cambia. Ma la cosa più assurda è che se il vet2 lo dichiaro di 9000byte ed eseguo tutto funziona come prima! Dove le prende 9000byte?
Altra prova se nella funzione anziché allocare dichiarando il vettore lo vado ad allocare dinamicamente con la malloc tutto funziona seconda la logica.
#include <FreeMemory.h>
#define LEN_VET 1024
#define LEN_VET2 300
byte vet1[LEN_VET];
void setup() {
Serial.begin(19200);
Serial.println(freeMemory());
for(int i=0;i<LEN_VET;i++) {
vet1[i] = i;
}
Serial.println(freeMemory());
gen();
Serial.println(freeMemory());
}
// the loop routine runs over and over again forever:
void loop() { //...
}
void gen()
{
byte *vet2;
//byte vet2[LEN_VET2];
vet2 = (byte *) malloc(LEN_VET2 * sizeof(byte));
for(int i=0;i<LEN_VET2;i++) {
vet2[i] = 100;
//Serial.println(vet2[i]);
}
Serial.println(freeMemory());
free(vet2);
}
Risultato:
810
810
504
810
il che è giusto.