Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

informazioni sul salto incondizionato

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] informazioni sul salto incondizionato

Messaggioda Foto Utentemros » 30 ott 2014, 12:59

Buongiorno a tutti

E' corretto utilizzare un salto incondizionato (istruzione GOTO) durante l'esecuzione di un routine verso un punto del main principale?

esempio

Codice: Seleziona tutto
   
CICLOX9       
BTFSS   PORTB,4
    GOTO   CIC1
   
   CALL         XROUTINE

   BTFSC   PORTB,4
   GOTO   CIC2

   BSF   ERRORE,0
   GOTO   CIC3


.......
nella routine
Codice: Seleziona tutto
XROUTINE
   MOVF   VALORE,W   
   SUBLW   0      

   BTFSC   STATUS,2   
   GOTO   CICLOX9
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[2] Re: informazioni sul salto incondizionato

Messaggioda Foto UtenteWALTERmwp » 30 ott 2014, 13:10

Ciao Foto Utentemros, non è ne corretto ne errato: è una possibilità.
Il fatto che sia opportuno o meno dipendo solo dall'esigenza applicativa: eseguire una istruzione piuttosto che un'altra.
Nella pratica l'indirizzo di memoria dal quale prelevare la successiva istruzione non sarà quello immediatamente seguente ma quello referenziato dalla label.
Questo vale sia che tu sia a livello principale piuttosto che all'interno di una funzione; in tale caso, però, non bisogna dimenticare che ci si è arrivati "caricando" lo stack.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: informazioni sul salto incondizionato

Messaggioda Foto UtenteGuidoB » 30 ott 2014, 13:22

Così come lo presenti direi che è sbagliato: una routine dovrebbe concludersi con una istruzione di ritorno (RET).
Col GOTO al posto del RET, la CALL continua a inserire l'indirizzo di ritorno sullo stack e nessuna RET lo toglie. Questo provoca stack overflow in un attimo.
Big fan of ƎlectroYou!       Ausili per disabili e anziani su ƎlectroYou
Caratteri utili: À È É Ì Ò Ó Ù α β γ δ ε η θ λ μ π ρ σ τ φ ω Ω º ª ² ³ √ ∛ ∜ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ∃ ∄ ∆ ∈ ∉ ± ∓ ∾ ≃ ≈ ≠ ≤ ≥
Avatar utente
Foto UtenteGuidoB
17,8k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 2809
Iscritto il: 3 mar 2011, 16:48
Località: Madrid

0
voti

[4] Re: informazioni sul salto incondizionato

Messaggioda Foto Utentemros » 30 ott 2014, 15:09

cosa succede poi? ?%
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[5] Re: informazioni sul salto incondizionato

Messaggioda Foto UtenteWALTERmwp » 30 ott 2014, 16:23

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 Foto UtenteGuidoB, 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.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[6] Re: informazioni sul salto incondizionato

Messaggioda Foto Utentemros » 30 ott 2014, 17:00

Ok :ok:

P.S.
PIC16F677 con 8 livelli di stack
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti