|   
 Return Address StackI PIC18 hanno uno stack a 31 livelli invece di 8 ed hanno un controllo di
  overflow sulla manipolazione dello stack. Due istruzioni, PUSH e POP, servono
  a questo scopo. Lo stack dei PIC16 è uno buffer circolare: push oltre l' ottavo livello
  sovrascrivono il primo livello e così via.Lo stack dei PIC18 è un buffer lineare e le condizioni di opearzioni oltre il
  livello 31 e al di sotto del livello 0 possono essere monitorate con due bit
  contenuti in un registro STCKPTR. A questi bit può essere associata una
  chiamata a RESET per correggere o segnalare la situazione anomala.
 Al POR lo stack è posizionato a 0, i bit di overflow sono azzerati e l'
  abilitazione del reset per overflow è inattiva. Quindi, se queste funzioni
  ausiliarie non sono richieste, la compatibilità con i mid-range è
  assicurata, con l' aggiunta di una profondità di stack maggiore. Se si intendono utilizzare funzioni di accesso allo stack o abilitare la
  funzione di allarme, occorre consultare le relative pagine del foglio dati. Da notare che, a fronte delle svariate possibilità di RESET presenti negli
  enhanced, è facilmente implementabile una gestione dell' evento che
  discrimini le varie cause e permetta di prendere le opportune misure.
   
 Azione
  
    
      
        | Se si ritiene possibile l' overflow dello stack, implementare il
          meccanismo di emergenza e la relativa analisi delle cause del reset. |    
   Fast Register StackSe nei mid range alla chiamata di interrupt corrispondeva tipicamente la
  ruotine di salvataggio dei registri indispensabili e quindi il restore prima
  del rientro, nei PIC18 il Costruttore ha implementato un automatismo che
  effettua questa operazione in modo interamente trasparente per il
  programmatore, senza aggiunta di tempo di esecuzione e senza richiedere
  impegno di registri RAM. Questa funzione prende il nome di Fast Register Stack.
 Ad ogni chiamata a interrupt, WREG, STATUS e BSR sono automaticamente
  salvati in tre registri speciali, non accessibili. Con l' istruzione RETFIE
  FAST, il contenuto dei registri è ripristinato. Va notato che, se il salvataggio avviene automaticamente, il recupero è
  effettuato solo con l' aggiunta del FAST.Questo permette di mantenere, volendo, la stessa struttura di salvataggio
  manuale implementata nei PIC16, senza modifiche se non quella di introdurre
  BSR (se usato) nel set dei registri salvati.
 Ovviamente la manovra più efficace è quella di abolire le routine o le
  macro di push e pull dei registri all' ingersso/uscita dell' interrupt e
  sfruttare questa funzione FAST.Questo porta immediati benefici per quanto riguarda la velocità di esecuzione
  e la lunghezza del sorgente.
 Maggior cura deve essere posta se si utilizzano i due livelli di priorità.In tal caso sarà opportuno riservare il FAST alla priorità superiore, dato
  che il salvataggio dei registri in modo automatico avviene ad ogni chiamata di
  interrupt e l' alta priorità può interrompere una interruzione a bassa
  priorità, sovrascrivendone così i registri salvati.
 Inoltre FAST può essere usato anche per chiamate di subroitine con l'
  istruzione CALL, inserndo una riga del genere: CALL  subroutine, FAST che dovrà essere chiusa da: RETURN FAST
 Anche qui, l' aggiunta del FAST rende
  l' operazione a discrezione del programmatore.   
 Azione
  
    
      
        | Ove possibile, eliminare il salvataggio manuale ed utilizzare il
          Fast Return Stack |    
  
    
      
        |   Se si utilizza questa funzione, bisogna avere ben presente che i
          registri di salvataggio sono unici ed ogni chiamata FAST sovrascrive
          il contenuto. Per cui una azione logica potrà essere questa: 
            se non si utilizza interrupt, FAST può essere usato senza
              problemi per le CALL
se si utilizza interrupt, FAST nelle CALL diventa molto
              critico ed è sconsigliato
se si utilizza interrupt a due priorità, FAST va riservato
              per la priorità maggiore, inserendo dove necessario un
              salvataggio manuale per la priorità a basso livello.   |      
   
 |