Autor Tema: Declarar constantes en direccion predefinida, CCS,  (Leído 2118 veces)

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

Desconectado culebrasx

  • PIC10
  • *
  • Mensajes: 39
Declarar constantes en direccion predefinida, CCS,
« en: 25 de Febrero de 2011, 20:25:45 »
Hola, me gustaría saber si se puede declarar constantes en la memoria de programa;Flash, de un 18F2550 con una direccion en concreto?

He estado mirando y no le veo la forma, la directiva Locate, me indica que es solo para la RAM, el asunto viene a raiz de unas funciones que estoy haciendo para borrar y escribir en la Flash, ya que las de CCS no me funcionan como quiero......

1º- Para el borrado de la flash: utilizo el codigo en ensamblador,  le paso al TBLPTR la direccion de una const char, 0x106a, me borra desde la 0x1040 hasta la 0x106f
 supongo que al borrar bloques, borra todo el bloque donde se halle la direccion en concreto,

2ºSI le doy a escribir los datos, si que me escribe desde la direccion que le indico, pero como en este caso esta casi al final del bloque no puede escribir del tirón las 32 palabras, se me corta, evindentemente, al llegar al final... y es por no borrar todos los bloques por no saber si me pilla un bloque a mitad de mi const char

3º- Si pudiera definir mi primera const char en la 0x1000 y el resto alineadas en multiplos de 64 no tendria ningun problema, borraria un bloque, y escribiria las 32 palabras de ese bloque....



muchas gracias a todos y un saludo desde Valencia, España....

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Declarar constantes en direccion predefinida, CCS,
« Respuesta #1 en: 26 de Febrero de 2011, 01:59:09 »
Lo puedes hacer con #org


This directive will fix the following function or constant declaration into a specific ROM area.   End may be omitted if a segment was previously defined if you only want to add another function to the segment. 

 


Desconectado culebrasx

  • PIC10
  • *
  • Mensajes: 39
Re: Declarar constantes en direccion predefinida, CCS,
« Respuesta #2 en: 26 de Febrero de 2011, 14:08:30 »
Gracias Nocturno; como siempre, simplemente era que lo estaba escribiendo de forma inadecuada....

Lo que pasa es que cuando uso la directiva #org por ejemplo  asi:

#org 0x2000,0x203f

const char G1[64]={"hqroooollllaaaaaajdhdefgwueylhaahhooroollllaaaaaajdhdefgweyl1233"} 
const char grupo2[46]={"hqroooollllaaaaaajdhdefgwueylhaahhooroollllaaaaaajdhdefgweyl1233"};

solo me crea G1, la G2no la crea,  estoy simulando CCS con MPLAB 8.63 , también he probado con proteus 7.7 sp2

si creo de esta forma:
#org 0x2000,0x203f

const char G1[64]={"hqroooollllaaaaaajdhdefgwueylhaahhooroollllaaaaaajdhdefgweyl1233"}
#org 0x2040, 0x207f
const char grupo2[46]={"hqroooollllaaaaaajdhdefgwueylhaahhooroollllaaaaaajdhdefgweyl1233"};

me crea la segunda pero añade un codigo de 16 bytes delante,


Uploaded with ImageShack.us

en la ayuda de CCS adiverte según puede entender que añadirá un codigo extra delante, pero lo añade en un caso si y en otro no, ¿en función de que añade ese codigo extra? he hecho 100 pruebas pero no veo el patrón

#ORG 0x1C00, 0x1C0F

CHAR CONST ID[10}= {"123456789"};

//This ID will be at 1C00

//Note some extra code will

//proceed the 123456789