Vai al contenuto
PLC Forum


Mplab X Funzione Step Over


DavidOne71

Messaggi consigliati

Ciao a tutti, vorrei passare a mplab X ma ci sono alcune cose che non funzionano e in particolare la funzione step over.

In mplab 8.84 nessun problema e anche nelle versioni precedenti...

MainLoop

34 call InitDelay

35 call DcR

36 call DcL

37 call PwrR

......

DcR

123 btfss SOFTON

124 return

125 movlw b'00000001' ; Seleziona il canale 0 (RA0),

126 movwf ADCON0 ; giustificato a sinistra, attiva il convertitore ADC

127 goto $+1 ; Ritardo di 5 us

128 goto $+1 ; per la carica

.....

I numeri li ho messi solo per capire meglio, quando simulo e sono alla linea 35 premo step over che dovrebbe eseguire la routine DcR senza entrarci e fermarsi sulla linea successiva (36) invece salta alla linea 37. Come mai? nella 8.84 non accade...

Spero che qualcuno mi possa aiutare

Grazie

:smile:

Link al commento
Condividi su altri siti


Probabilmente e' un bug del simulatore/emulatore.

Prova ad inserire una "nop" tra le due call (tra il punto 35 e 36).

Non dici quale compilatore utilizzi.

Prova a compilare con il minimo di ottimizzazione.

Alla prossima...

Link al commento
Condividi su altri siti

Innanzi tutto grazie per la risposta non ci speravo più :smile:

Prova ad inserire una "nop" tra le due call (tra il punto 35 e 36).

In effetti funziona pero non mi sembra eccezionale :(

Non dici quale compilatore utilizzi.

MPASM v5.49

Prova a compilare con il minimo di ottimizzazione.

Non vale per i compilatori ad alto livello? io scrivo in assembler :huh:

Link al commento
Condividi su altri siti

Hai ragione, in assembler non ci sono livelli di ottimizzazione.

Per curiosita', prova a fare questa modifica:

DcR

123 btfss SOFTON

124 goto label

125 movlw b'00000001' ; Seleziona il canale 0 (RA0),

126 movwf ADCON0 ; giustificato a sinistra, attiva il convertitore ADC

127 goto $+1 ; Ritardo di 5 us

128 goto $+1 ; per la carica

.....

130 label return

Togli la "nop" che hai inserito tra la riga 35 e 36.

Puoi postare l'inizio della funzione "DcL" ?

Link al commento
Condividi su altri siti

130 label return

Perdonami, ma non ho capito il "label", devo scriverla proprio cosi?

Puoi postare l'inizio della funzione "DcL" ?

Il codice che ho postato era solo un esempio, me lo fa su tutte le call che ho :wacko:

comunque questa è tutta la routine:

DcL

btfss SOFTON

return

movlw b'00000101' ; Seleziona il canale 1 (RA1),

movwf ADCON0 ; giustificato a sinistra, attiva il convertitore ADC

goto $+1 ; Ritardo di 5 us

goto $+1 ; per la carica

nop ; del condensatore

bsf ADCON0,GO ; start conversion

btfsc ADCON0,GO ; this bit will change to zero when the conversion is complete

goto $-1

ifdef __DEBUG

movlw 100

movwf ADRESH

endif

movfw ADRESH ; Salva il valore acquisito

sublw 38

btfss _C

goto $+2

goto DcLover

movfw ADRESH ; Salva il valore acquisito

sublw 141

btfss _C

goto DcLover

bcf DCL ; Imposta errore soglia DC non superata

return

DcLover bsf DCL ; Imposta errore soglia DC superata

return

Scusa per l'allineamento ma l'editor del forum mi toglie gli spazi :(

Modificato: da DavidOne71
Link al commento
Condividi su altri siti

E' una etichetta per il "goto". Puoi usare un nome qualunque.

Se il problema rimane, prova ad iniziare le tue funzioni con una "nop"

e non con il test della variabile "SOFTON".

Non ti preoccupare per l'allineamento.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...