Autor Tema: crear un array unidimensional superior a 256 posiciones.  (Leído 3297 veces)

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

Desconectado Sir_Egnos

  • PIC12
  • **
  • Mensajes: 92
crear un array unidimensional superior a 256 posiciones.
« 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.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: crear un array unidimensional superior a 256 posiciones.
« Respuesta #1 en: 12 de Marzo de 2008, 17:55:40 »
Sin el const compila bien... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: crear un array unidimensional superior a 256 posiciones.
« Respuesta #2 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.





- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Sir_Egnos

  • PIC12
  • **
  • Mensajes: 92
Re: crear un array unidimensional superior a 256 posiciones.
« Respuesta #3 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.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: crear un array unidimensional superior a 256 posiciones.
« Respuesta #4 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];


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: crear un array unidimensional superior a 256 posiciones.
« Respuesta #5 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
 
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: crear un array unidimensional superior a 256 posiciones.
« Respuesta #6 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.

Desconectado gu1llermo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 217
Re: crear un array unidimensional superior a 256 posiciones.
« Respuesta #7 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.