TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jfmateos2 en 24 de Enero de 2008, 07:43:56

Título: Defino eeprom en CCS con #rom pero MPLAB mete un byte nulo entre cada 2 bytes
Publicado por: jfmateos2 en 24 de Enero de 2008, 07:43:56
He definito el contenido de la eeprom en CCS mediante:

Código: [Seleccionar]
#rom 0xf00000={25,0,0,0,0,0,11,250,1,251,60,61,62,63,64,64,251,254,10,10,251,60,61,62,63,64,64,251,248}
Pero cuando muestro la EEPROM en MPlab 8 aparece esto, es decir, hay un byte 00 entre cada 2 bytes que yo he definido. Esto provoca que el programa no se depure correctamente.

(http://img444.imageshack.us/img444/6491/eeprompr1.th.jpg) (http://img444.imageshack.us/my.php?image=eeprompr1.jpg)

¿Por qué ocurre esto?
 PD: Estoy usando un 18F2455 y la eeprom se muestra correctamente en WinPIC800
Gracias
Título: Re: Defino eeprom en CCS con #rom pero MPLAB mete un byte nulo entre cada 2 bytes
Publicado por: jfmateos2 en 24 de Enero de 2008, 07:56:49
Parece ser que mplab reconoce cada valor de #rom como un dato de 16 bits, y por eso introduce el byte nulo, según deduzco de lo siguiente que encontré en el foro de CCS.

Citar
The problem you are having is because of the relationship between the output file, and the actual _word_ layout in the PIC. The PIC18 is a 16bit processor. The two successive bytes in the output file, actually correspond to the top and bottom bytes of a single output _word_. The #rom directive allows you to write words. Hence to put the values so that they appear in the successive output file locations, requires the definitions to be reformatted into words instead of bytes. Hence:
#ROM 0xF00000={0x0201,0x0403}
will put the four characters into the successive output locations.

Ahora la pregunta es:

¿Existe alguna opción en MPlab, similar a la que tiene WinPIC800, para que los valores de #rom se interpreten como datos de 8 bits.

Si no existe me va a tocar reescribir un montón de código.
Título: Re: Defino eeprom en CCS con #rom pero MPLAB mete un byte nulo entre cada 2 bytes
Publicado por: jfmateos2 en 24 de Enero de 2008, 08:14:41
Resuelto (parcialmente):

En lugar de usar simplemente

Código: [Seleccionar]
#rom 0xffffff ={...}
utilizo

Código: [Seleccionar]
#rom int8 0xffffff ={...}
y así puedo definir los datos de #rom mediante bytes en lugar de dobles-bytes.

De este modo MPlab lo reconoce correctamente, pero en WinPIC hay que hacer la siguiente modificación:

Configuración>Software>Hex: Desactivar la casilla Archivos .HEX -> Datos 18Fxxx dirección * 2
Título: Re: Defino eeprom en CCS con #rom pero MPLAB mete un byte nulo entre cada 2 bytes
Publicado por: Nocturno en 24 de Enero de 2008, 08:32:54
Veo que tú te lo guisas y tú te lo comes.

Quería comentarte lo de la opción de Winpic pero ya la has descubierto. Yo también me estuve comiendo el coco mucho rato con eso.
Título: Re: Defino eeprom en CCS con #rom pero MPLAB mete un byte nulo entre cada 2 bytes
Publicado por: MGLSOFT en 24 de Enero de 2008, 09:49:33
No conocia esa opcion de la instruccion #ROM  !!! :shock: :shock:
Título: Re: Defino eeprom en CCS con #rom pero MPLAB mete un byte nulo entre cada 2 byte
Publicado por: PalitroqueZ en 24 de Enero de 2008, 21:05:31
¿tendrá relación con esto?

http://www.todopic.com.ar/foros/index.php?topic=16561.msg109401#msg109401


http://www.todopic.com.ar/foros/index.php?topic=15208.msg109430#msg109430
(aplicado en asm)