Autor Tema: auto_psv  (Leído 3128 veces)

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

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
auto_psv
« en: 03 de Mayo de 2007, 08:19:58 »
Pues eso mismo que es y para que vale auto_psv. Es que al actualizar el compilador me demanda que en los vectores de interrupción le especifique si es auto o no.

Grácias.

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: auto_psv
« Respuesta #1 en: 08 de Mayo de 2007, 05:24:34 »
Hola no es por ser pesado pero alguien sabe para que sirve el auto psv  (es un parametro que al actualizar el compiladro te obliga a ponerlo en los vectores de interrupción

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: auto_psv
« Respuesta #2 en: 09 de Mayo de 2007, 01:21:44 »
Hola zer0, el auto_psv utiliza el PSV o Visibilidad de Espacio de Programa para colocar constantes en la memoria de programa. Por ejm:

Código: [Seleccionar]
void __attribute__((interrupt, auto_psv))  _T1Interrupt(void)

   const char *foo = "una cadena constante";
   IFS0bits.T1IF = 0;    /* borra el flag del timer1 */
   T1CONbits.TCKPS=2;    /* Prescaler = 8 */
   WriteTimer1(0);       /* lo resetea a 0 */
}

*foo es un puntero, fíjate en el valor que tiene, por ejm en mi programa tiene el valor de 0x8346, quiere decir que apunta a la dirección 0x8346 de la RAM que es "RAM de datos X no implementada". El PSV utiliza los valores del 0x8000 a 0xFFFF de esta RAM para mapearlos en una página de 16k palabras de la memoria de programa.

Entonces necesita 23bits para direccionar la memoria de programa, 15 bits vienes de los 15bits más bajos de un registro W y los 8 más altos vienen del registro PSVPAG. Para este ejm el PSVPAG tiene valor 0 y el registro W0 será 0x346 (0x8346-0x8000) ubicado en la pag0 de la memoria de programa.

No te confundas 0x8346 es la dirección en la RAM (RAM de datos X no implementada) en donde empieza la cadena constante y 0x346 es la dirección en la memoria de programa  donde empieza la misma cadena. Por eso se dice que esta RAM de 32kbytes o 16k palabras está mapeada en la memoria de programa.

Puedes ver más sobre el PSV en este documento.

Saludos

control de movimiento