Página 1 de 1

Sair de interrupção sem retfie

MensagemEnviado: 04 Ago 2007 10:36
por SoMeWhErE
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.

MensagemEnviado: 04 Ago 2007 13:23
por MOR_AL
Olá SoMeWhErE.

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

MOR_AL

MensagemEnviado: 04 Ago 2007 16:03
por tcpipchip
Infelizmente voce nao tem acesso ao pilha como em outras arquiteturas...

MensagemEnviado: 04 Ago 2007 20:17
por SoMeWhErE
soh pra informar, que esqueci, o endereço salvo quando entra na interrupção, não importa pra mim, é desprezível.

MensagemEnviado: 04 Ago 2007 21:16
por RobL
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

MensagemEnviado: 06 Ago 2007 07:59
por RobL
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.

MensagemEnviado: 06 Ago 2007 08:53
por shhadowzone
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".