Vai al contenuto
PLC Forum


Interrupt


rosario1200

Messaggi consigliati

Salve a tutti,

volevo porvi una domanda, e' possibile cancellare o modificare (nella sub di interrupt) l'indirizzo di ripartenza all'uscita dell' Interrupt?

Grazie

Link al commento
Condividi su altri siti


Matteo Montanari

noi siamo molto lieti di risponderti... ma di cosa stiamo parlando?

se non ti è troppo disturbo puoi fornire più dati

o

dobbiamo sottoporti alla sonda mentale, minacciarti con spada laser, ... (altre cose del genere)?

grazie a nome di tutti

Modificato: da keosmm
Link al commento
Condividi su altri siti

ciao!

dipende!!!

dal micro , dal programma ., da un mucchio di cose.

se l'indirizzo e' in eeprom o flash direi di no

a meno che non venga caricato in ram per poter essere usato.

sui micro che uso io cio' non e' possibile

(nel modo da te immaginato) nel mondo PC (dos)

invece e' possibile perche' si usava far puntare l'interrupt

su di un altra routin che una volta eseguita restituiva alla routin originale

(correva l'anno 1300 A.C.) ora con il modo windows

le cose son cambiate.

puoi dire che micro e' oppure il sist.operativo??

ciao

dario

Link al commento
Condividi su altri siti

Scusate, ma ho scritto il messaggio in fretta e son dovuto scappare.

IL Pic interessato è il 16f84a, e quello che mi chiedo è possibile modificare, una volta entrato in una sub di interrupt, l'indirizzo di ripresa del programma principale?

Spero di essere stato chiaro, sono un principiante in materia, scusatemi.

Link al commento
Condividi su altri siti

la routine di interrupt, quando viene lanciata, pusha automaticamente l'indirizzo di ritorno nello stack; quindi è possibile modificare l'indirizzo di ritorno agendo sull'indirizzo memorizzato, basta scrivere il nuovo indirizzo nello stack. Alcuni vecchi processori, come 8051, hanno anche un'struzione speifica che scambia il contenuto dei registri H-L con il contenuto del top dello stack.

Io comunque sconsiglio questa pratica, se non si fa molta, ma molta, attenzione sono solo guai:(

Link al commento
Condividi su altri siti

Ciao Livio,

stavo cercando di capire nei datasheet come fare a modificare l'indirizzo contenuto in uno degli 8 stack disponibili, ma forse non sono stato molto attento, o probabilmente non ci sono elementi utili per far capire questa cosa a un principiante come me.

Quindi ti chiedo, se ti e' possibile, farmi un esempio su come puntare uno di questi stack.

Saluti

Link al commento
Condividi su altri siti

No non ci sono 8 stacks (catasta) di satck ce ne è uno solo, anzi non è nel micro ma è nella ram, c'è un registo che punta al top dello stack (è detto stack pointer) è presente in tutti i controllori. Quello che stai chiedendo, l'esempio, to l'ho gia fatto nel post precedente. Nel tuo caso devi studiarti bene come lavora il tuo micro. Basta leggere cosa succede quando si esegue una call. Il manuale del PIC dice, testualmente, PC+1 --> TOS (Program counter + 1 nel top dello stack) e

k --> PC (indirizzo della routine nel PC). Quando avviene un interrupt esegue autoamticamente la chiamata a sounroutine di interupt.

Link al commento
Condividi su altri siti

  • 2 months later...

Salve a tutti

Anch'io ho lo stesso problema e, scusate l'ignoranza, ho fatto un po di prove sul pic 16f628 ma non sono riuscito a tornare da un interrup in un punto da me scelto.

per meglio dire caricando nel registro PCL il valore associato al mio punto di riferimento il programma esegue correttamente l'istruzione ma, non mi abbassa un livello di stack facendolo andare man mano in overflow. Chiedo se potete farmi un esempio di codice. Grazie :(

Link al commento
Condividi su altri siti

Il problema e' che nei PIC lo stack degli indirizzi di ritorno e' un'area di memoria distinta e inaccessibile al programma, e' gestita automaticamente dall'hardware del micro quando vengono eseguite certe istruzioni (call, return, retlw, retfie).

Sui microprocessori piu'evoluti lo stack si trova invece nella memoria dati principale e puo' contenere indifferentemente dati o indirizzi, e pertanto i suoi valori sono manipolabili come meglio si crede.

Concordo con Livio che se c'e' la necessita' di tornare da un interrupt saltando verso punti ben precisi (e quindi non riprendendo il lavoro che si stava eseguendo prima dell'interrupt) c'e' qualcosa di almeno un po'strano nella logica con cui e' strutturato il programma, anche se non e' detto che non funzioni.

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...