Newsgroup: it.hobby.elettronica.digitale
Titolo: stack pointer

quando in una mcu ï¿œ utile resettare il puntatore allo stack ?
grazie
Spectre

 quando in una mcu � utile resettare il puntatore allo stack ?
? 
Che domanda �? A parte che molte MCU non hanno alcun controllo dello 
stack, nel senso che l'utente non pu� manipolarlo, a che pro 
resettare il puntatore allo stack?
-- 
IBM: Irresponsibility Behaved Multinational
News 2002 [v 2.4] - [ StopDialers/PopDuster/SMTP Proxy - 
http://www.socket2000.com
 ]

 
parecchie mcu che ho visto io hanno i controllo dello stack,
in teoria va' resettato dopo l'avvio della cpu.
che mcu hai usato tu ?
Spectre

quando in una mcu � utile resettare il puntatore allo stack ?
Dopo il reset, e anche a volte in determinati punti dove sai che passerai in
determinate condizioni.
Io ad esempio resetto lo stack pointer prima di andare in Sleep perch� potrebbe
esserci un errore nello stack che potrebbe portare a un overflow e questo lo
rimette a posto comunque.
Ovviamente sto parlando di programmi scritti in assembler, usando linguaggi pi�
evoluti � meglio non toccare lo stack, anzi no si pu� nemmeno fare.
--
ciao
  Stefano


Direi che lo SP va impostato dopo il reset e poi basta.
I normali programi devono soltanto incrementare e decrementare
lo SP. Solo il sistema operativo pu� assegnare un nuovo valore
allo SP per esempio in caso di context switching.
Ma un vero reset dello SP va fatto solo in caso di un crash
che impedisce il regolare proseguimento, come per esempio
uno stack overflow.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 che mcu hai usato tu ?
Dipende cosa intendi per MCU... Io intendo Microcontroller Unit...
-- 
I smell a wumpus.


 Spectre
E' più preciso parlare di inizializzazione che di "reset".
Di conseguenza, dopo un reset.
Durante l'elaborazione può avvenire una manipolazione sapiente dello
stack; con molta, moltissima attenzione!
A seguito di eventi drastici, poi, si può reinizializzare l'SP in modo
da gestire eventi diversi dal normale funzionamento.
Ad esempio, dopo un NMI (Not Maskable Interrupt) generato da
sottotensione, si può pensare di attivare una subroutine di
salvataggio dei dati "flushando" lo stack perché a quel punto
dell'elaborazione normale non ne frega più niente a nessuno.
In tal modo si ha la garanzia di gestire il salvataggio senza pericolo
di sforare con le call, i push ed i pop.
Piccio.

 di sforare con le call, i push ed i pop.
Non serve se hai gi� inizializzato lo stack nella main. Perch� 
sicuramente dopo il salvataggio si passa al vettore di reset, ovvero 
ripassi dalla main...
-- 
IBM: I'm Buying Macintosh


ripassi dalla main...
Se per� un NMI arriva quando sei dentro alle routines con un livello di stack
vicino al limite, � meglio ripristinare subito lo stack pointer altrimenti si
potrebbe sporcare la memoria subito sotto se l'NMI fa altre chiamate.
E se poi la macchina si spegne o si resetta lo stack pointer sar� comunque
reinizializzato.
NMI\ mi fa venire in mente lo Z80.
--
ciao
  Stefano

   Stefano
Bingo...   :)
Piccio.

 quando in una mcu è utile resettare il puntatore allo stack ?
io lo faccio solo nella inizializzazione dopo il reset, e solo se e' un
uC che non lo fa per conto suo.
poi, all' inizio di ogni main, verifico che SP sia al livello giusto:
se esito e' positivo, e dopo altre verifiche di sicurezza, gestisco il
watchdog e procedo con il main;
se invece esito e' negativo (SP corrotto, inequita' tra push e pop, tra
call e return, tra interrupt e iret) scrivo un codice di errore in una
locazione non inizializzata (ram o registro di periferica) e genero un
reset HW usando il watchdog;
dopo il reboot il codice di errore sara' scaricato e visualizzato sulla
telemetria (utile in fase di debug, problemi sul campo, e durante le
prove EMC).
in caso di stack HW non accessibile, e' possibile resettarlo usando una
serie di ret (a volte preceduta da una serie di call, dipende dal uC).
saluti
-- 
  lowcost