Sair de interrupção sem retfie

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Sair de interrupção sem retfie

Mensagempor SoMeWhErE » 04 Ago 2007 10:36

Olá, pessoal

estou fazendo um programa pra controlar lcds e em meu programa o loop principal só fica piscando a tela principal, estou usando interrupções pra mudar de tela, e quando a acabar de tratar a interrupção eu quero que o programa volte a executar do inicio do loop principal onde esta a tela principal e não voltar pro endereço seguinte de onde aconteceu a interrupção.

Alguém sabe me informar se pode ocorrer algum problema, se em vez de eu usar o RETFIE pra sair da interrupção eu usar um GOTO pro loop principal.

OBRIGADO.
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor MOR_AL » 04 Ago 2007 13:23

Olá SoMeWhErE.

De imediato vejo que, com a repetição das interrupções, a pilha (o stack) vai se encher e transbordar.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor tcpipchip » 04 Ago 2007 16:03

Infelizmente voce nao tem acesso ao pilha como em outras arquiteturas...
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor SoMeWhErE » 04 Ago 2007 20:17

soh pra informar, que esqueci, o endereço salvo quando entra na interrupção, não importa pra mim, é desprezível.
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor RobL » 04 Ago 2007 21:16

Execute seu serviço de interrupção e ao final deste, em vez de RETI faça um goto para o mesmo endereço e deixe estourar por WDT.
Não me lembro se reset por WDT reinicializará seu stack. Se sim está feito.
Há um refinamento. Verificando os bits relativo ao estouro por WDT pode desviar para onde quizer.

Ex:
Int - verifica quem chamou

sevico 1
codigo 1
estouro:
goto estouro

servico 2
codigo2
goto estouro
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor RobL » 06 Ago 2007 07:59

Testei com o simulador e o stack é reinicializado com o reset por WDT.


Outra forma de conseguir seu intento é trabalhar com todas interrupções desabilitada INTCON,GPIO = 0 mas varrer todos os flags de interrupções que lhe interessam.
Ex:
varre flags

testa bit do flag 1
goto inicio
testa bit do flag 2
goto inicio

inicio:
limpa todos os flags das interrupções.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor shhadowzone » 06 Ago 2007 08:53

Bom dia,
set uma variável dentro da rotina de interrupção no retorno, dentro de cada rotina teste se a variável está setada, se estiver limpe-a e "goto principal".
shhadowzone
Bit
 
Mensagens: 23
Registrado em: 24 Out 2006 07:19


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x