Autor Tema: Duda sobre guardado de contexto  (Leído 2439 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Duda sobre guardado de contexto
« en: 13 de Mayo de 2008, 16:17:33 »
Tengo un problema con un programa y estoy sospechando del contexto guardado antes de ir a la interrupcion

tengo esta rutina sacada de internet que hasta ahora habia funcionado sin problemas

Código: [Seleccionar]
GUARDA_CONTEXTO    MACRO ;Guarda el contexto para que el servicio de interrupción
        movwf    REG_W_INTERRUPCION ;no afecte al buen funcionamiento del resto de rutinas
        swapf    STATUS,W ;que se interrumpen en cualquier momento por ésta.
        clrf     STATUS
        movwf    REG_STATUS_INTERRUPCION
        movfw    PCLATH
        clrf     PCLATH
        movwf    REG_PCLATH_INTERRUPCION
        movfw    FSR
        clrf     FSR
        movwf    REG_FSR_INTERRUPCION
        ENDM

Que pasa si en el momento de entrar en la interrupción no estamos en el banco0 donde se guardan las variables? no guardaria el contexto no? Y no puedo poner al principio de este Guardar_contexto el cambio al banco0 pq logicamente modificaria status antes de guardarlo.
« Última modificación: 13 de Mayo de 2008, 16:37:14 por elmasvital »

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Duda sobre guardado de contexto
« Respuesta #1 en: 13 de Mayo de 2008, 23:40:51 »
Buena sospecha yo ya tuve ese problema http://www.todopic.com.ar/foros/index.php?topic=17792.0  pero tambien te olvidastes de guardar W

la mejor solucion es,por ejemplo si trabajas con 16f87xA, es usar los registros en los que guardas el contexto a partir de la direccion 70h ya que en todos los bancos se ven la misma posicion.

   GUARDA_CONTEXTO    MACRO         ;Guarda el contexto para que el servicio de interrupción
                MOVWF   REGW                                       ; guarda W
           movwf    REG_W_INTERRUPCION   ;no afecte al buen funcionamiento del resto de rutinas
           swapf    STATUS,W         ;que se interrumpen en cualquier momento por ésta.
           clrf     STATUS
           movwf    REG_STATUS_INTERRUPCION
           movfw    PCLATH
           clrf     PCLATH
           movwf    REG_PCLATH_INTERRUPCION
           movfw    FSR
           clrf     FSR
           movwf    REG_FSR_INTERRUPCION
           ENDM


recuperacion  para la salida de interrupcion 

................................................
...............................................




           movfw    REG_FSR_INTERRUPCION
           movwf    FSR
           movfw    REG_PCLATH_INTERRUPCION
           movwf    PCLATH
           SWAPF    REG_STATUS_INTERRUPCION,W
      MOVWF    STATUS
      SWAPF    REGW,F
      SWAPF    REGW,W

                     retfie


SAL u 2

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Duda sobre guardado de contexto
« Respuesta #2 en: 14 de Mayo de 2008, 11:03:36 »
Buena sospecha yo ya tuve ese problema http://www.todopic.com.ar/foros/index.php?topic=17792.0  pero tambien te olvidastes de guardar W
Según leo yo lo está guardando en REG_W_INTERRUPCION

elmasvital como habrás notado el guardado de contexto no es algo tan simple como parece al principio y en micros más grandes con más de una página de memoria de datos ocurren cosas como las que estas enfrentando.

He aquí mis consejos.

1) Si tu micro tiene memoria accesible desde todos los bancos y no la estas usando, úsala como te ha sugerido picnic. 
2) Si tu micro tiene memoria accesible desde todos los bancos pero la usas para tu código entonces no es buena idea usarla, para ello te sugiero reserves una región de memoria de datos en todas las páginas, de esa forma te aseguras que los datos se grabaran y no serán borrados por tu propio código.

Yo uso ambas alternativas en mis códigos y no he tenido problemas.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Duda sobre guardado de contexto
« Respuesta #3 en: 14 de Mayo de 2008, 15:56:32 »
No sabia que existia algun tipo de memoria accesible desde todos los bancos, al margen de los FSR.

Sabeis si el 16f877a tiene alguna region de memoria de los GPR o cualquier otra que pueda usa para compartir entre todos los bancos? Hay alguna otra manera de evitar el problema mencionado con el servicio de interrupción?

1 saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Duda sobre guardado de contexto
« Respuesta #4 en: 14 de Mayo de 2008, 17:48:27 »
Yes. Las tiene...

Las posiciones 0x70 a 0x7F de la familia 16F87Xx son accesibles desde cualquier banco(son 16 registros GPR).

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Duda sobre guardado de contexto
« Respuesta #5 en: 14 de Mayo de 2008, 19:30:49 »
Ups... perdon no lo vi... :? :?


 

anything