rosario1200 Inserito: 24 maggio 2005 Segnala Inserito: 24 maggio 2005 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
Matteo Montanari Inserita: 24 maggio 2005 Segnala Inserita: 24 maggio 2005 (modificato) noi siamo molto lieti di risponderti... ma di cosa stiamo parlando?se non ti è troppo disturbo puoi fornire più datiodobbiamo sottoporti alla sonda mentale, minacciarti con spada laser, ... (altre cose del genere)?grazie a nome di tutti Modificato: 24 maggio 2005 da keosmm
Dario Valeri Inserita: 24 maggio 2005 Segnala Inserita: 24 maggio 2005 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'interruptsu di un altra routin che una volta eseguita restituiva alla routin originale(correva l'anno 1300 A.C.) ora con il modo windowsle cose son cambiate.puoi dire che micro e' oppure il sist.operativo??ciaodario
rosario1200 Inserita: 24 maggio 2005 Autore Segnala Inserita: 24 maggio 2005 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.
Livio Orsini Inserita: 24 maggio 2005 Segnala Inserita: 24 maggio 2005 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:(
rosario1200 Inserita: 27 maggio 2005 Autore Segnala Inserita: 27 maggio 2005 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
Livio Orsini Inserita: 27 maggio 2005 Segnala Inserita: 27 maggio 2005 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.
rosario1200 Inserita: 27 maggio 2005 Autore Segnala Inserita: 27 maggio 2005 Ok, ci sono riuscito.Grazie mille per la disponibilita'.CiaoRosario
volonelweb Inserita: 10 agosto 2005 Segnala Inserita: 10 agosto 2005 Salve a tuttiAnch'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
Claudio F Inserita: 11 agosto 2005 Segnala Inserita: 11 agosto 2005 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.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora