Autor Tema: Nombres de variable variables (Variable Variable names)  (Leído 3604 veces)

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

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Nombres de variable variables (Variable Variable names)
« en: 17 de Enero de 2008, 11:39:50 »
Lo que sigue es una simplificación de mi problema real.

Tengo definidos varios (muchos) arrays cuyo número de elementos no siempre es el mismo:

int medida0[3]={0,0,31};
int medida1[4]={31,0,31};
int medida2[6]={0,0,31};
... imaginen que esto continúa...

y quiero referirme, por ejemplo, al 2º elemento de cada uno de esos array mediante un bucle. ¿conocen alguna forma de hacerlo?

Premisa: Ando mal de memoria RAM y ROM
« Última modificación: 17 de Enero de 2008, 11:43:54 por jfmateos2 »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #1 en: 17 de Enero de 2008, 12:13:10 »
y quiero referirme, por ejemplo, al 2º elemento de cada uno de esos array mediante un bucle. ¿conocen alguna forma de hacerlo?

Si entendí bien tu quieres hacer medidan[2] , donde n vaya cambiando...

En C para microcontroladores no creo que haya forma, no que yo sepa al menos.  Ahora si haces un array bidimensional, eso ya es otra cosa y tienen que ser todos sus elementos iguales.

Una sugerencia sería que hagas un solo array, largo y que sepas en el código donde comienza cada elemento, pero si me dices que andas mal de memoria rom... ¿tampoco tendrías lugar para guardar una tabla de constantes donde indiques el inicio de cada array dentro del array grande?

Para ahorrar "espacio en código" puedes hacer un macro pero ya no sería un bucle (siempre que tu compilador lo permita).  Un macro que reemplace texto (donde solo escribirias medida(n) y le texto a continuación seria el que pasas como parámetro 0,1, 2... etc) , el macro pegaria medida1, medida2, etc , pero sería equivalente a tipear el nombre de los arrays a mano.

- 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 jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #2 en: 17 de Enero de 2008, 13:10:54 »
Muchas gracias Maunix. Se me olvidó comentar que uso CCS.

Actualmente lo tengo resuelto con un array de punteros, como indico a continuación, pero pensé que habría una forma mejor:

Código: [Seleccionar]
int medida0[3]={0,0,31};
int medida1[4]={31,0,31,34};
int medida2[6]={0,0,31,23,45,12};
...más declaraciones de arrays del tipo medida[b]x[/b]...

int *medidas[255]={medida0, medida1, medida2, ...};
for (i=0;i<256;i++){
   segundoElementoDeMedida=*(medidas[i]+1);
}

Por cierto, ¿existe alguna limitación en cuanto al tamaño de los arrays en CCS C? En el libro de Nigel Gardner "PIC micro MCU C" he leído lo siguiente:

Citar
Due to the PICmicro MCU´s memory map, arrays of 100 or 10x10 are not possible. However, two of 50 arrays would fit.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #3 en: 17 de Enero de 2008, 16:35:04 »
Te comento algo, usar un arreglo de punteros no es la cosa más eficiente en memoria... un puntero a memoria ocupará un par de bytes de memoria RAM.  Para eso te conviene usar constantes, digo, para ahorrar memoria RAM.

En cuanto al tamaño del array no es "culpa" el CCS sino del pic, su memoria no es contigua entonces no hay forma de crear un array grande por esa razón.  Depende del pic que uses, en los 18F si podes armar arreglos más grandes porque tienen bancos contiguos pero en los 16F no.

Saludos
- 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 jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #4 en: 17 de Enero de 2008, 17:51:05 »
Hola maunix, ¿podrías explicarme un poco mejor cómo es eso de usar constantes en este caso concreto?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #5 en: 17 de Enero de 2008, 19:27:45 »
Hola Juanfe, es como lo menciona maunix, mientras mas largos quieras los array mas memoria ram deberas tener, eso dependera del pic y de cuan largo sea tu arreglo

en cambio si usas constantes no usas la RAM, usas la memoria de programa, y de ese generalmente hay bastante, por lo menos hay siempre muhco mas que en la RAM

eso lo haces asi:

Código: [Seleccionar]
int const data[208]={48,120,204,204,252,204,204,204,248,204,204,248,248,204,204,248,252,
192,192,192,192,192,192,252,240,200,204,204,204,204,200,240,252,192,192,240,240,192,192,252,252,
192,192,240,240,192,192,192,60,64,192,192,216,204,204,248,204,204,204,204,252,204,204,204,252,
48,48,48,48,48,48,252,252,48,48,48,48,48,176,224,196,200,208,224,208,204,204,204,192,
192,192,192,192,192,192,252,238,214,214,198,198,198,198,198,196,228,244,212,212,204,204,196,48,
204,204,204,204,204,204,48,248,204,204,204,248,192,192,192,56,196,196,196,196,212,200,52,248,
204,204,204,248,208,200,196,120,204,192,192,120,12,12,248,252,48,48,48,48,48,48,48,204,
204,204,204,204,204,204,120,204,204,204,204,204,204,72,48,198,198,198,198,198,214,214,238,132,
132,72,48,48,72,132,132,204,204,204,120,48,48,48,48,252,252,8,16,32,64,252,252};

cuando lo hice sin el const, me aparecia un error de dimension, y esto para un 16f88, que tiene nomas buena ram

y hasta puedes colocarle un unsigned mas, quedaria (no vi diferencia en usos de ROM y RAM, pero talvez ahorre unos bytes mas, nose, corrijanme si me equivoco):

unsigned int const data[208]{..,..,.,......}
« Última modificación: 17 de Enero de 2008, 19:29:52 por Cryn »
.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #6 en: 17 de Enero de 2008, 21:09:01 »
El unsigned no cambia el tamaño de la variable, si no que define como se tratará el primer bit de la variable (0=positivo, 1=negativo) cuando se declara signed y cuando se declara como unsigned siempre será positiva la variable.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #7 en: 17 de Enero de 2008, 21:21:22 »
ok, entendido.

entonces si es signed, solo será hasta 128 valores posibles, ya que se esta comiendo un bit, pero 128 positivos y 128 negativos, y ahi estan los 256 valores para un INT de 8 bits, cierto?
.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #8 en: 17 de Enero de 2008, 21:25:58 »
Totalmente correcto, veo que lo has cogido a la primera.

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #9 en: 17 de Enero de 2008, 21:52:33 »
 :mrgreen: es qeu con el teimpo se va aprendiendo un poquitin mas :-/
.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #10 en: 18 de Enero de 2008, 05:09:53 »
Gracias cryn y jfh, pero si declaro los arrays como constantes ya no podré utilizar punteros a ellos y, ¿cómo consigo entonces referirme a todos ellos mediante un bucle?

Cuando Maunix me hace esta recomendación:

Citar
Te comento algo, usar un arreglo de punteros no es la cosa más eficiente en memoria... un puntero a memoria ocupará un par de bytes de memoria RAM.  Para eso te conviene usar constantes, digo, para ahorrar memoria RAM.

lo que no entiendo es cómo referirme a esas constantes mediante un bucle.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #11 en: 18 de Enero de 2008, 05:14:21 »
¿Y si haces?

int const medida[n,anchomax]=...;

Desperdiciarías espacio en la memoria de programa, porque tendrías que ajustar todas las filas al anchomax, pero si tienes espacio de programa de sobra...

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #12 en: 18 de Enero de 2008, 09:29:03 »
Gracias Nocturno, eso es lo que primero pensé, pero tengo que exprimir hasta el último bit de RAM/ROM.





Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #13 en: 18 de Enero de 2008, 09:39:35 »
Ah, creí que tenías sitio para almacenar constantes.

Y a todo esto, ¿puedes explicar para qué lo necesitas?

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nombres de variable variables (Variable Variable names)
« Respuesta #14 en: 18 de Enero de 2008, 09:50:45 »
No tengo sitio para nada de nada de nada, no me cabe ni un alfiler...

En unos días os lo presento en sociedad, pero adelanto que va en la línea de la lámpara RGB de azicuetano.