TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Sir_Egnos en 12 de Marzo de 2008, 17:34:52

Título: crear un array unidimensional superior a 256 posiciones.
Publicado por: Sir_Egnos en 12 de Marzo de 2008, 17:34:52
Estoy comenzando en esto de la programacion en c y me he topado con un problema que espero me ayudeis a resolver.

El problema es que ccs que es el compilador que uso no acepta un array de una dimension de mas de 256 posiciones y mi pregunta es si existe algun truco para hacer eso sin complicaciones. En el uso de punteros no estoy nada practico por eso os pido ayuda.

Repito, el problema es que quiero general un array de esta forma:

const char datos[1024];

Mi intencion es colocar en estas 1024 casillas los datos a volcar en una pantalla grafica de 128x64 con un controlador ks0108.

Gracias a todos y espero vuestra ayuda.
Título: Re: crear un array unidimensional superior a 256 posiciones.
Publicado por: MGLSOFT en 12 de Marzo de 2008, 17:55:40
Sin el const compila bien... :mrgreen:
Título: Re: crear un array unidimensional superior a 256 posiciones.
Publicado por: maunix en 12 de Marzo de 2008, 19:01:20
const char datos[1024];

Debiera compilar... pero lo de 1024 está sujeto a la memoria ram del pic que uses.  Solamente sería posible con un 18F de más de 1 Kbyte de memoria y en adelante.  En los otros pics no solo que no tienes tanta memoria sino que no es contigua lo cual hace imposible que el compilador permita ese tipo de declaración en ram

Const le dice al compilador que dichos datos no se modificarán en el código (aunque de hecho uno lo podría hacer usando punteros por ejemplo).  Habría que leer el manual del CCS para ver si a las variables CONST te las guarda en la memoria flash.  El C18 no, por eso pregunto.





Título: Re: crear un array unidimensional superior a 256 posiciones.
Publicado por: Sir_Egnos en 12 de Marzo de 2008, 19:55:52
Efectivamente, mi intencion con lo de cons es que utilizara memira flas y no utilizara memoria ram. El ccs no acepta, creo, vectores de mas de 256 posiciones. Por eso, como aun estoy empezando, queria vuestra opinion por si me estoy haciendo un lio yo solo o simplemente es que no se puede.

 Gracias.
Título: Re: crear un array unidimensional superior a 256 posiciones.
Publicado por: maunix en 13 de Marzo de 2008, 11:25:28
Efectivamente, mi intencion con lo de cons es que utilizara memira flas y no utilizara memoria ram. El ccs no acepta, creo, vectores de mas de 256 posiciones. Por eso, como aun estoy empezando, queria vuestra opinion por si me estoy haciendo un lio yo solo o simplemente es que no se puede.

 Gracias.


Pero fijate en el manual del CCS cómo hay que hacer para crear constantes en la memoria flash

Por ejemplo, En C18 es


const rom char [1024];


Título: Re: crear un array unidimensional superior a 256 posiciones.
Publicado por: MGLSOFT en 13 de Marzo de 2008, 11:58:15
Deberas fijarte en el uso de comandos de preprocesamiento #ROM  y  #ORG.
Mira lo que dice la ayuda de #ROM.

Citar
#ROM

--------------------------------------------------------------------------------

Syntax:
 #rom address = {list}

#rom int8 address = {list}

#rom char address = {list}

 
Elements:
 address is a ROM word address, list is a list of words separated by commas

Purpose:
 Allows the insertion of data into the .HEX file.  In particular, this may be used to program the '84 data EEPROM, as shown in the following example.

Note that if the #ROM address is inside the program memory space, the directive creates a segment for the data, resulting in an error if a #ORG is over the same area. The #ROM data will also be counted as used program memory space.

The int8 option indicates each item is 8 bits, the default is 16 bits.

The char option treats each item as 7 bits packing 2 chars into every pcm 14-bit word.


When linking multiple compilation units be aware this directive applies to the final object file.

 
Examples:
 #rom  0x2100={1,2,3,4,5,6,7,8}

 Example Files:
 None
 
Also See:
 #org
 
Título: Re: crear un array unidimensional superior a 256 posiciones.
Publicado por: jeremylf en 13 de Marzo de 2008, 19:23:54
Tambien estan: write_program_memory y write_program_eeprom. Aunq nose si te serviran, ni de como usarlas.

Suerte.
Título: Re: crear un array unidimensional superior a 256 posiciones.
Publicado por: gu1llermo en 14 de Marzo de 2008, 00:48:11
...
Pero fijate en el manual del CCS cómo hay que hacer para crear constantes en la memoria flash

Por ejemplo, En C18 es


const rom char [1024];



Aunque no fué conmigo, me tomé la diligencia de investigar un poco en la ayuda del CCS también y según esta, se puede hacer de la siguiente forma, que es parecida a la que publicas maunix del C18:


Código: [Seleccionar]
BYTE CONST TABLE [10]= {9,8,7,6,5,4,3,2,1,0};

y para acceder:

Código: [Seleccionar]
x = TABLE [i];

ó

x = TABLE [5];

Puedes probar buscando en el índice del CCS la palabra rom.

Saludos.