Autor Tema: Duda con #ROM en CCS ...  (Leído 1744 veces)

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

Desconectado delirio

  • PIC12
  • **
  • Mensajes: 64
Duda con #ROM en CCS ...
« en: 31 de Mayo de 2016, 00:23:38 »
Buenas noche Foro, como andan??
Viendo en el help de CCS, se puede usar #ROM para que al momento de grabar el PIC se guarde un determinado valor. En el ejemplo ponen algo similar como: #ROM 0x2100 = { 0x55, 0xAA }

Ahora mi duda :

Como saber cual es el address de la ROM... uso un PIC16F1826, con 2k (2048) de flash y 256 de EEPROM, en el datasheet aclara que el acceso a la EEPROM se hace de forma indirecta, pero no logro entender si se encuentra al final de los 2k de flash o donde...
Si coloco #ROM 0x0000 = { 0x55, 0xAA } me da error al compilar...
a partir de #ROM 0x0045 ya compila bien... pero mi 55 y AA no están donde quiero....
Si quiero grabar en la quinta posición, cual debería ser la dirección??
Otra cosa, en la siguiente función, ya estoy utilizando 4 posiciones para grabar unos datos, y funciona correctamente.
Debería usar algun #ORG para reservar memoria?? Talvez esté mezclando las cosas, soy novato en el tema!

Código: [Seleccionar]

void off(char i) {
   if(current_value[i] >= MIN) {                      // si el valor nuevo en menor que MIN
      new_value[i] = APAGADO;                         // cargamos valor de OFF (0x00)
      last_value[i] = current_value[i];               // Guarda último valor de dimmer en RAM
      if(last_value[i] != read_EEPROM(i)) {           // Si el último valor cambió al de la EEPROM
         write_eeprom (i, last_value[i]);             // entonces lo guarda
      }
      canal[i].off_action = 0;                        // trabajo realizado, desactivamos flag de apagado
   }
}


aquí el datasheet del micro que estoy usando!!  Muchas gracias por la paciencia / Saludos

http://ww1.microchip.com/downloads/en/DeviceDoc/41363A.pdf

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7681
Re:Duda con #ROM en CCS ...
« Respuesta #1 en: 31 de Mayo de 2016, 02:04:48 »
Citar
These devices have 256 bytes of data EEPROM withan address range from 0h to 0FFh.

Deberia ir de 0x00 a 0xFF tal cual dice el datasheet. No es parte de la memoria.

Citar
Si quiero grabar en la quinta posición, cual debería ser la dirección??

Deberia ser 0x05. Si no lo es entonces es problema del compilador.

Citar
Debería usar algun #ORG para reservar memoria?? Talvez esté mezclando las cosas, soy novato en el tema!

No, la ORG es para ubicar codigo en cierta posicion de memoria flash. No tiene nada que ver con la EEPROM

Desconectado delirio

  • PIC12
  • **
  • Mensajes: 64
Re:Duda con #ROM en CCS ...
« Respuesta #2 en: 31 de Mayo de 2016, 12:52:20 »
Gracias KILLERJC... siempre estás ahí,
Entonces estoy experimentando algún bug o error del compilador...
Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7681
Re:Duda con #ROM en CCS ...
« Respuesta #3 en: 31 de Mayo de 2016, 14:31:51 »
Tal ves crea que lo estas intentando poner en la memoria de programa y no en la EEPROM.
Un ejemplo que da el manual es asi:

Código: C
  1. #rom getnev ("EEPROM_ADDRESS")={1,2,3,4,5,6,7,8}

Si podes dar el error que te dice podria buscar por internet, ya que no uso CCS

Desconectado delirio

  • PIC12
  • **
  • Mensajes: 64
Re:Duda con #ROM en CCS ...
« Respuesta #4 en: 01 de Junio de 2016, 16:49:28 »
Según entiendo del help de ccs, la directiva #ROM inserta en una porción de la mem de programa los datos donde desp leerá dichos datos...
el error que tira con #ROM  0x00 = {1}

Código: [Seleccionar]
>>> Warning 207 "mTouch-16F1826.c" Line 91(1,1): Code has no effect
--- Info 300 "mTouch-16F1826.c" Line 319(1,2): More info:   Segment at 00000-00000 (0001 used)  Priv
--- Info 300 "mTouch-16F1826.c" Line 319(1,2): More info:   Segment at 00001-007FF (0000 used)
--- Info 300 "mTouch-16F1826.c" Line 319(1,2): More info:   Attempted to create: 00000-00002  for reset
*** Error 126 "mTouch-16F1826.c" Line 319(1,2): Invalid ORG range

con tu sugerencia #rom  getnev ("EEPROM_ADDRESS")={1}

Código: [Seleccionar]
>>> Warning 228 "mTouch-16F1826.c" Line 13(31,32): Memory not available at requested location  -- getnev
*** Error 27 "mTouch-16F1826.c" Line 13(31,32): Expression must evaluate to a constant
*** Error 43 "mTouch-16F1826.c" Line 13(31,32): Expecting a declaration
*** Error 43 "mTouch-16F1826.c" Line 13(32,33): Expecting a declaration
*** Error 43 "mTouch-16F1826.c" Line 13(33,34): Expecting a declaration
*** Error 43 "mTouch-16F1826.c" Line 13(34,35): Expecting a declaration
*** Error 43 "mTouch-16F1826.c" Line 13(35,36): Expecting a declaration
      6 Errors,  1 Warnings.
Build Failed.

pero si le pongo un int , osea     #rom  int (0x00)={1}    lo compila bien pero tira warning que esa direccion de memoria no está disponible...  no entiendo nada...

Código: [Seleccionar]
>>> Warning 228 "mTouch-16F1826.c" Line 11(20,21): Memory not available at requested location
>>> Warning 207 "mTouch-16F1826.c" Line 90(1,1): Code has no effect
>>> Warning 216 "mTouch-16F1826.c" Line 318(1,2): Interrupts disabled during call to prevent re-entrancy:  (@MUL88)
>>> Warning 216 "mTouch-16F1826.c" Line 318(1,2): Interrupts disabled during call to prevent re-entrancy:  (USART_activa_tx)
>>> Warning 216 "mTouch-16F1826.c" Line 318(1,2): Interrupts disabled during call to prevent re-entrancy:  (USART_activa_rx)
>>> Warning 216 "mTouch-16F1826.c" Line 318(1,2): Interrupts disabled during call to prevent re-entrancy:  (@delay_ms1)
>>> Warning 228 "mTouch-16F1826.c" Line 318(1,1): Memory not available at requested location
      Memory usage:   ROM=66%      RAM=21% - 27%
      0 Errors,  7 Warnings.
Build Successful.

Seguiré haciendolo a la vieja usanza... a la hora de quemar el micro  :5] -  gracias nuevamente

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7681
Re:Duda con #ROM en CCS ...
« Respuesta #5 en: 01 de Junio de 2016, 19:01:54 »
Sinceramente parece ser que intenta grabar la ROM y no la EEPROM. Buscando un poco mas en el manual del CCS encontre que hay que buscar la direccion correcta en las especificaciones de programacion del micro.

Segun el datasheet de programacion de ese micro:
http://ww1.microchip.com/downloads/en/DeviceDoc/41390D.pdf ( Pag 29 )

Citar
The physical address range of the 256 byte data memory is 0000h-00FFh. However, these addresses are logically mapped to address 1E000h-1E1FFh in the hex file.
La direcciones fisicas son de 0000 a 00FF, pero que la logica es de 1E000 a 1E1FF

es decir que el .hex los valores de direccion de la EEPROM son estos ultimos. Por lo tanto seria asi para grabar el primero:

Código: C
  1. #ROM  0x1E000 = {1}

Eso pondria en el .hex para grabarlo un 1 en la direccion 0x1E000 que seria la EEPROM.

Desconectado delirio

  • PIC12
  • **
  • Mensajes: 64
Re:Duda con #ROM en CCS ...
« Respuesta #6 en: 02 de Junio de 2016, 11:37:03 »
Interesante hallazgo, a la tarde con programador en mano lo pruebo y les comento!
Gracias nuevamente KILLERJC

Desconectado robo_z

  • PIC10
  • *
  • Mensajes: 15
Re:Duda con #ROM en CCS ...
« Respuesta #7 en: 08 de Octubre de 2019, 12:08:13 »
La Memoria EEPROM para el PIC16F1826 Empieza en la Direccion 0xF000, Esto se ve en Tools/Device Editor/Memory/Data EE Start