- Messaggi: 65
- Ringraziamenti ricevuti 0
punto di ritorno dopo interrupt
8 Anni 6 Mesi fa #1
da giannic
punto di ritorno dopo interrupt è stato creato da giannic
Salve s tutti,
vorrei che qualcuno mi spiegasse come posso cambiare l'indirizzo di ritorno dopo avere eseguito interrupt con un 18f4550 usando xc8.
penso di avere capito che si puo' giocare con un registro in lettura-scrittura.
lo scopo di questa richiesta e'il fatto che non voglio che il programma continui ad essere eseguito normalmente dopo il ritorno appunto dall interrupt ma venga deviato in un altra posizione.
sto gestendo il tutto ad alta priorita.
Vorrei inoltre che qualche persona di buon cuore (senza by-pass...) mi spiegasse cosa potrebbe portare ad un uso improprio di una manipolazione di questo tipo.
grazie
vorrei che qualcuno mi spiegasse come posso cambiare l'indirizzo di ritorno dopo avere eseguito interrupt con un 18f4550 usando xc8.
penso di avere capito che si puo' giocare con un registro in lettura-scrittura.
lo scopo di questa richiesta e'il fatto che non voglio che il programma continui ad essere eseguito normalmente dopo il ritorno appunto dall interrupt ma venga deviato in un altra posizione.
sto gestendo il tutto ad alta priorita.
Vorrei inoltre che qualche persona di buon cuore (senza by-pass...) mi spiegasse cosa potrebbe portare ad un uso improprio di una manipolazione di questo tipo.
grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- giannic
- Autore della discussione
- Senior Member
Riduci
Di più
8 Anni 5 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic punto di ritorno dopo interrupt
Per cambiare il punto di ritorno devi manipolare lo stack.
In particolare lo stack memory dei PIC18 non è manipolabile non appartenendo ad uno spazio di memoria RAM indirizzabile.
Fa in realtà eccezione il top dello stack che sarebbe proprio quello che interesserebbe a te.
Lo puoi manipolare facendo uso di registri dedicati (vedi il datasheet per maggiori dettagli, sezione return address stack).
Se manipoli in maniera errata lo stack potresti bloccare il tuo programma o causare dei reset.
Il salto in luoghi diversi del programma ti richiederebbe un'allocazione statica del tuo programma, almeno delle parti dove vuoi saltare. Il compilatore potrebbe non accettare di buon cuore codice statico (indirizzi assoluti) visto che perderebbe il controllo dell'allocazione di alcune parti di memoria.
...gli effetti collaterali sarebbero difficili da gestire.
Con i PCI18 non giocherei troppo con lo stack.
Saluti,
Mauro
In particolare lo stack memory dei PIC18 non è manipolabile non appartenendo ad uno spazio di memoria RAM indirizzabile.
Fa in realtà eccezione il top dello stack che sarebbe proprio quello che interesserebbe a te.
Lo puoi manipolare facendo uso di registri dedicati (vedi il datasheet per maggiori dettagli, sezione return address stack).
Se manipoli in maniera errata lo stack potresti bloccare il tuo programma o causare dei reset.
Il salto in luoghi diversi del programma ti richiederebbe un'allocazione statica del tuo programma, almeno delle parti dove vuoi saltare. Il compilatore potrebbe non accettare di buon cuore codice statico (indirizzi assoluti) visto che perderebbe il controllo dell'allocazione di alcune parti di memoria.
...gli effetti collaterali sarebbero difficili da gestire.
Con i PCI18 non giocherei troppo con lo stack.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
8 Anni 5 Mesi fa #3
da giannic
Risposta da giannic al topic punto di ritorno dopo interrupt
grazie mauro per la risposta e come sempre superpreparato...
infatti gia' dopo qualche prova mi sono ritrovato vari reset del pic
trovo comunque potenzialmente utile giocherellare con il TOS e vorrei degli ulteriori chiarimenti nel caso in cui volessi sfruttare il metodo backup/ripristino per fare poi ritorno dopo aver finito tutte le deviazioni fatte manualmente. registri shadow status bsr ?
tutto questo casino che sto facendo e' nato solo perche' avendo a che fare con un encoder incrementale meccanico e un LCD 44780 mi succede che non riesco a rendere fluidi e veloci gli scatti dell encoder stesso perche' al ritorno dall interrupt deve prima finire magari la scrittura sul display che richiede del tempo e poi finito di fare tutte le cose che incontra nel programma andare ad eseguire il debounce con il flag a 1 dell'encoder e mi si rallenta il tutto...
qualche idea ?
infatti gia' dopo qualche prova mi sono ritrovato vari reset del pic
trovo comunque potenzialmente utile giocherellare con il TOS e vorrei degli ulteriori chiarimenti nel caso in cui volessi sfruttare il metodo backup/ripristino per fare poi ritorno dopo aver finito tutte le deviazioni fatte manualmente. registri shadow status bsr ?
tutto questo casino che sto facendo e' nato solo perche' avendo a che fare con un encoder incrementale meccanico e un LCD 44780 mi succede che non riesco a rendere fluidi e veloci gli scatti dell encoder stesso perche' al ritorno dall interrupt deve prima finire magari la scrittura sul display che richiede del tempo e poi finito di fare tutte le cose che incontra nel programma andare ad eseguire il debounce con il flag a 1 dell'encoder e mi si rallenta il tutto...
qualche idea ?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- giannic
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 65
- Ringraziamenti ricevuti 0
8 Anni 5 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic punto di ritorno dopo interrupt
La tua problematica si risolve con le state machine senza richisare Reset inutili.
Ne faccio riferimento nel corso del testo XC8 Step by Step.
In particolare tra i progetti presentati per il modulo ADC vi è un esempio completo sul come usare una state machine.
Saluti,
Mauro
Ne faccio riferimento nel corso del testo XC8 Step by Step.
In particolare tra i progetti presentati per il modulo ADC vi è un esempio completo sul come usare una state machine.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
8 Anni 5 Mesi fa #5
da giannic
Risposta da giannic al topic punto di ritorno dopo interrupt
Mauro ti ringrazio per la tua disponibilita' ....
Non riesco a trovare il file di esempio dove usi le state machine,potresti darmi una dritta?
Sto facendo molta confusione a riguardo le macchine a stato finito perche' in rete ho trovato come sempre tutto e di piu' solo che mi sto perdendo in un bicchiere di acqua e ho bisogno di capire le cose come funzionano in modo piu' semplice... qualche dritta da parte di qualcuno di voi?
Non riesco ad applicare le cose che apprendo perche'non sono capace di seguire contemporaneamente sia la programmazione che quel poco di teoria che studio.
Non riesco a trovare il file di esempio dove usi le state machine,potresti darmi una dritta?
Sto facendo molta confusione a riguardo le macchine a stato finito perche' in rete ho trovato come sempre tutto e di piu' solo che mi sto perdendo in un bicchiere di acqua e ho bisogno di capire le cose come funzionano in modo piu' semplice... qualche dritta da parte di qualcuno di voi?
Non riesco ad applicare le cose che apprendo perche'non sono capace di seguire contemporaneamente sia la programmazione che quel poco di teoria che studio.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- giannic
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 65
- Ringraziamenti ricevuti 0
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.