Attualmente sto lavorando a un progetto su un Arduino che dovrebbe funzionare per più anni senza interruzioni. Per fare questo, ho cercato di evitare costruttori, decostruttori e allocazione dinamica delle variabili generali tutti insieme, al fine di evitare perdite di memoria e altri modi di esaurire la memoria.
Questo progetto ha un paio di array molto grandi. Ho avuto un paio di casi in cui dopo aver modificato un #define
il mio codice si caricava, ma si bloccava in pochi secondi. Cambiare questi array in statico invece mi ha dato errori durante il caricamento, a indicare che non c'era abbastanza memoria disponibile. Quindi sono andato su questa strada.
La mia domanda riguarda le prestazioni di questo approccio. In questo momento, ho una funzione che ha un corpo in quanto tale:
uint16_t total = 0;
uint8_t count = 0;
for (int8_t i = AMOUNT_OF_MEASUREMENTS_FOR_AVERAGE; i>=0;--i){
if (measurementsHigh[i] == 255){
continue;
}
count++;
total+=measurementsHigh[i];
}
if (count == 0){
return 0;
}
return total/count;
Questo calcola la media di tutti i valori in measurementsHigh
. Tuttavia, alloca anche quattro byte nello stack. Stavo pianificando di riscriverlo, in modo che le variabili i
, count
e total
siano dichiarate nella classe come statiche, quindi prendi in considerazione questi 4 byte durante il caricamento.
La mia domanda non riguarda assolutamente se questo è considerato utile. Ad uno potrebbe sembrare solo aggiungere complessità e rendere il programma meno leggibile, all'altro sembrerebbe saggio nel contesto della programmazione integrata. Ciò potrebbe portare a discussioni che non vorrei provocare.
Invece, la mia domanda è ciò che fa in termini di prestazioni. Uso questo blocco di codice più volte e posso utilizzare le stesse variabili da un paio di punti del mio codice. È più veloce, più lento o non importa in termini di velocità? Migliora la stabilità del mio programma per evitare l'uso dello stack? (Lo so, con un uso corretto non si può creare una perdita di memoria nello stack, ma ancora ... matrici enormi di cui sopra ...) Ci sono altri modi per migliorare la stabilità di questo codice, che ho trascurato?