Limite di nidificazione delle routines

Ciao forum, con un mio apprendimento di OOP con python, trovo l' analogia di poter fare anche in Arduino. Sebbene conscio che non c'è una vastità di risorse. Così facendo posso partizionare le operazioni in funzioni, col vantaggio di una migliore gestione.

Non vorrei esagerare per questo domando quanti livelli di nidificazione delle funzioni si possono utilizzare, prima di uno stack overflow? Ovvero da una funzione ne richiamo una altra e ancora una, oppure la ricorsività (!!?).

Già mi vedo che per ogni call, si dovrebbe salvare tutti i registri (mi pare siano 56 bytes al colpo). Il compilatore se ne accorge, se il programma crea un o stack overflow ?

ExperimentUno: ... Il compilatore se ne accorge, se il programma crea un o stack overflow ?

NO, il compilatore non si accorge di nulla e ti ricordo che su Arduino UNO hai solo 2KBytes di SRAM che è usata per tutto ... quindi occhio che fai presto a sovrascrivere e ... NON ti avvisa nessuno, se non il programma che impazzisce :D

Guglielmo

P.S.: QUESTO è un interessante articolo di leo72 sull'uso della memoria

Bene, come si può calcolare quanto spazio prende una chiamata a funzione. Sono sole le variabili locali che prendono posto sullo stack ?

Evitando quelle, si può anche vivere con le variabili globali, sebbene si pecca nella portabilità. Ma per la portabilità ho ancora tanto da studiare.

Letto il blog, grazie. Forse mi sto confondendo con le chiamate da ISR, che salvano i registri nello stack.

Quando chiami una funzione, sicuramente alcune cose vengono salvate nello stack ... ad esempio l'ndirizzo di ritorno, altrimenti non riusciresti a tornare indietro da una serie di chiamate. Oltre questo tutte le variabili locali che vengono create all'interno di una funzione sono messe nello stack, e così via.

Se una funzione la richiami in modo ricorsivo ed essa crea variabili locali ... ad ogni chiamata esse vengono create ex-novo nello stack.

L'unico sistema è verificare, con la solita funzioncina, la memoria libera e ... accorgersene prima che sia troppo tardi.

Altro link utile ... QUESTO

Guglielmo

Grazie! In genere mi attengo ad usare variabili globali e al massimo faccio 2 o 3 chiamate nidificate. Non dovrei avere problemi, tanto non ho ancora scritto programmi che superano il 60% della SRAM.