Autor Tema: Cómo emular punteros a constantes en CCS  (Leído 7342 veces)

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

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Cómo emular punteros a constantes en CCS
« Respuesta #15 en: 22 de Marzo de 2007, 11:04:36 »
Hola Nocturno. Sabes que estuve viendo detenidamente la instrucción TBLRD para leer datos de la ROM

entre unos ejemplitos que escribí e investigando en la ayuda del CCS, llegué al siguiente resultado:

- una forma de guardar tablas en la ROM es usando

#rom direccion = {'datos'}

y la función para leerla es

READ_PROGRAM_MEMORY (direccion, dataptr, count );

dataptr es el arreglo donde se guardaran los datos y count la cantidad de bytes


aquí hay un ejemplo que hice

Código: C
  1. #include <18f4550.h> //archivo de cabecera
  2. #use delay(clock=48000000) // el clock que tendremos a la entrada del CPU
  3.  
  4. #rom 0x600 = {"Me encanta que los planes salgan bien\0"}
  5.  
  6. void main(){
  7. int   i[39], t;
  8.    for(t=0;t<39;t++){
  9.       i[t]=0;  // limpiamos el arreglo
  10.    }
  11.     delay_cycles(1);
  12.     read_program_memory(0x600,i,39);
  13.     // cargamos la direccion del puntero y guardamos la tabla en
  14.     // el arreglo i
  15.     delay_cycles(1);
  16. }

una simulación en MPLAB:

ver imagen en el adjunto.

si miramos el listado en asm por un momento veremos

Código: ASM
  1. 13:                    read_program_memory(0x600,i,39);
  2.   0056    6AF8     CLRF 0xff8, ACCESS   ; TBLPTRU <- 0
  3.   0058    0E06     MOVLW 0x6
  4.   005A    6EF7     MOVWF 0xff7, ACCESS  ; TBLPTRH <- 0x6
  5.   005C    6AF6     CLRF 0xff6, ACCESS   ; TBLPTRL <- 0

ese pedacito de código está cargando a 0x600 en el el registro de 21 bits TBLPTR sospecho y casi que estoy seguro que hacen la lectura a través del Table Latch (TABLAT) para después tomar los datos a partir de esa dirección.


no se como se implementaría en tu programa, pero haz la prueba a ver si esto te sirve.

si hay que estar pendiente que la direccion esté desocupada (el inconveniente), pero se puede solucionar si asignas al resto del código un #org start, end es cuestión de jugar con la cantidad de espacio que se lleve tu programa.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Cómo emular punteros a constantes en CCS
« Respuesta #16 en: 22 de Marzo de 2007, 14:06:28 »
Gracias Palitroquez. Ahora estoy metido en otra guerra, pero cuando pueda lo probaré.