mros ha scritto:cosa succede poi?
... cose indicibili, pochi sono sopravvissuti per poterlo raccontare ...
Allora, continuando a richiamare funzioni tramite le CALL si verifica che, come ha scritto
GuidoB, saturi lo stack (riempi tutti i suoi livelli) e poi alla successiva scrittura (utilizzo della CALL) torni a scrivere sulla prima posizione dello stack stesso.
Ora, supponendo tu abbia uno stack di otto(8) posizioni, alla nona scrittura il "silicio" ti porterà a scrivere di nuovo sulla prima posizione dello stack (sovrascrittura circolare).
Il fatto è che non puoi tornare "indietro".
Significa quindi che se sei "sceso" di nove livelli non avrai più la facoltà di tornare al primo punto del programma (posizione del programma) dalla quale hai effettuato la prima CALL ( ... delle nove ipotizzate).
In questa situazione, continuando a richiamare il contenuto dello stack, ti trovi dinanzi a comportamenti più che imprevedibili, da parte del tuo codice; comportamenti che non sei in grado di spiegare se non ipotizzando una errata gestione dello stack ( ... prima però lo devi scoprire ...).
Ti suggerisco la lettura del datasheet del microcontrollore sul quale ti stai applicando.
Cerca "program memory" così da trovare i capitoli relativi alla organizzazione della memoria e la gestione del PC (Program Counter, ovvero il Contatore di Programma).
Saluti
W - U.H.F.