Autor Tema: Stack overflow  (Leído 3554 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Colino

  • PIC10
  • *
  • Mensajes: 11
Stack overflow
« en: 01 de Noviembre de 2016, 06:01:19 »
Holá

Na simulação deste software dá "hardware stack overflow" na instrução
 

fechar
       BSF     0x05,0   
« Última modificación: 01 de Noviembre de 2016, 06:20:17 por Colino »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Stack overflow
« Respuesta #1 en: 01 de Noviembre de 2016, 08:22:17 »
Cuando haces un CALL la direccion se guarda en el stack ( +1 elemento en el stack ). Cuando haces un RETURN la direccion sale del stack ( -1 elemento en el stack ).

Entonces... Un CALL si o si debe encontrar un RETURN.

Tu CALL:
Citar
fechar 
   BSF     GPIO,0              ; LIGA  A LUZ 
   CALL    delay1              ; ACTIVA ATRASO DE 30 MINUTOS

delay:
Citar
delay1                               ; TEMPORIZAÇÃO DE 30 MINUTOS
   movlw   0x7E               
   movwf   count1              ;carrega contador 1
   movlw   0x14
   movwf   count2              ;carrega contador 2
   movlw   0x21
   movwf   count3              ;carrega contador 3     
        nop   
   decfsz   count1, f           
   goto   $+2
   decfsz   count2, f
   goto   $+2
   decfsz   count3, f
   goto   main

No hay RETURN!. Entonces siempre estas poniendo algo en el stack pero nunca sacando, por eso el Stack Overflow.

Solucion:

Código: ASM
  1. delay1                              ; TEMPORIZAÇÃO DE 30 MINUTOS
  2.         movlw   0x7E                
  3.         movwf   count1              ;carrega contador 1
  4.         movlw   0x14
  5.         movwf   count2              ;carrega contador 2
  6.         movlw   0x21
  7.         movwf   count3              ;carrega contador 3    
  8.         nop  
  9.         decfsz  count1, f          
  10.         goto    $+2
  11.         decfsz  count2, f
  12.         goto    $+2
  13.         decfsz  count3, f
  14.         return

Desconectado Colino

  • PIC10
  • *
  • Mensajes: 11
Re:Stack overflow
« Respuesta #2 en: 01 de Noviembre de 2016, 10:59:19 »
Ok gracias
Mas tengo otro problema

counters não decrementa

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Stack overflow
« Respuesta #3 en: 01 de Noviembre de 2016, 14:59:00 »
Primero:

- ¿30 minutos en el que el micro no hace nada?

Código: ASM
  1. delay1                              ; TEMPORIZAÇÃO DE 30 MINUTOS
  2.         movlw   0x7E                
  3.         movwf   count1              ;carrega contador 1
  4.         movlw   0x14
  5.         movwf   count2              ;carrega contador 2
  6.         movlw   0x21
  7.         movwf   count3              ;carrega contador 3
  8.         nop    
  9. dLoop:  
  10.         decfsz  count1, f          
  11.         goto    $+2
  12.         decfsz  count2, f
  13.         goto    $+2
  14.         decfsz  count3, f
  15.         goto     dLoop
  16.         return

Desconectado Colino

  • PIC10
  • *
  • Mensajes: 11
Re:Stack overflow
« Respuesta #4 en: 01 de Noviembre de 2016, 16:52:44 »
Sim
 30 minutos com GP0 (pin 7) en  ON

  Penso que tengo o codigo pronto

Desconectado Colino

  • PIC10
  • *
  • Mensajes: 11
Re:Stack overflow
« Respuesta #5 en: 01 de Noviembre de 2016, 17:19:06 »
Qual la diferença em usar  timers   TMR0, TMR1L, TMRH en los counters,  e los endereços 20, 21, 22 por exemplo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Stack overflow
« Respuesta #6 en: 01 de Noviembre de 2016, 17:45:18 »
Hay varios Timers.

El Timer0 es de 8 bits.
El Timer1 es de 16bits.

TMR0 corresponder al Timer0, y TMR1H:TMR1L corresponde al Timer1.

Mas informacion en el datasheet del micro.

------------------------------

Si los programas a los Timers podes usar las interrupciones, de esa forma el micro sigue haciendo otra cosa, mientras contas el tiempo.

Desconectado Colino

  • PIC10
  • *
  • Mensajes: 11
Re:Stack overflow
« Respuesta #7 en: 01 de Noviembre de 2016, 18:25:43 »
OK

Mutchas gracias Killerjc

 Vou fazer el PCB e testar
Futuramente se pode implementar PWM em GP0

  Gracias por  tu ayuda


 

anything