Autor Tema: pregunta simple sobre array  (Leído 1516 veces)

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

Desconectado Berto

  • PIC16
  • ***
  • Mensajes: 191
pregunta simple sobre array
« en: 04 de Abril de 2016, 14:16:05 »
a la vez que declaro un array puedo meterle directamente todos sus valores
int8 array[51]={1,111,11,200,50,190,12,87,130,44,199,2,70,80,30,113,120,99,9,199,123};

pero no me interesa hacerlo en la declaracion, mas que nada por si se resetea el micro
porque no puedo hacer esto en main(); o sus funciones despues de declararlo

void defecto(){
array[]={1,111,11,200,50,190,12,87,130,44,199,2,70,80,30,113,120,99,9,199,123};//mal
array[]{1,111,11,200,50,190,12,87,130,44,199,2,70,80,30,113,120,99,9,199,123};//mal
array[51]={1,111,11,200,50,190,12,87,130,44,199,2,70,80,30,113,120,99,9,199,123};//mal
array[51]{1,111,11,200,50,190,12,87,130,44,199,2,70,80,30,113,120,99,9,199,123};//mal
}
Esta funcion solo se cumple al iniciar el proyecto por primera vez mediante -read_eeprom- o se lo pida yo esplicitamente al programa.
Que es lo que estoy poniendo, o no poniendo bien??

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:pregunta simple sobre array
« Respuesta #1 en: 04 de Abril de 2016, 20:38:33 »
Hay unas cosas que tenes que conocer. Primero, el declarar valores iniciales donde sea:

Código: [Seleccionar]
int8 array[51]={1,111,11,200,50,190,12,87,130,44,199,2,70,80,30,113,120,99,9,199,123};
Hace que tenga que existir un codigo para "llenarlos" y por lo cual ocupa memoria Flash. Ya que la memoria RAM comienza con un valor desconocido.
Si se resetea lo primero que hace el codigo de inicializacion de C, es llenar nuevamente el array con esos valores, asi que no deberias preocuparte por eso.
Y otra cosa, este codigo de inicializacion que se ejecuta antes de entrar al main, normalmente pone a 0 todos los demas registros.

Código: [Seleccionar]
porque no puedo hacer esto en main(); o sus funciones despues de declararlo
No podes cargar muchos elementos asi como lo estas haciendo Fuera de la declaracion. Lo cual te llevaria a tener que crear un array en la flash y usar algo que copie todos esos valores a tu array. Basicamente lo mismo que hubiera ocurrido antes.

Si tu idea es que ya que unicamente lo vas a usar en el momento del arranque y que no ocupe RAM, entonces crearia una funcion, lo declararia ahi al array, compruebo con la eeprom, salgo de la funcion destruyendo el array ese, y listo, ya el array no me consume RAM para nada.

En resumen, por las razones que diste, segui como estabas haciendolo.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re:pregunta simple sobre array
« Respuesta #2 en: 04 de Abril de 2016, 22:56:58 »
En casi todos los compiladores orientados a embebidos, colocando un const o un rom o un flash en la declaración y colocandolo  como global, esos valores están en rom.

Saludos !

Desconectado Berto

  • PIC16
  • ***
  • Mensajes: 191
Re:pregunta simple sobre array
« Respuesta #3 en: 05 de Abril de 2016, 12:22:54 »
Si tengo comprobado que se quedan en la RON es lo que ocurre y quiero con el resto de valores
pero veo que tendre que hacer esto como el resto de variables array[0]=1; array[1]=111...sucesivo

No puedo crear el array dentro de la funcion, a menos que se pueda y me digais como se hace global dentro de esta
main() y el resto de sus funciones no la reconocerian

Saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:pregunta simple sobre array
« Respuesta #4 en: 05 de Abril de 2016, 13:37:48 »
Si tengo comprobado que se quedan en la RON es lo que ocurre y quiero con el resto de valores
pero veo que tendre que hacer esto como el resto de variables array[0]=1; array[1]=111...sucesivo

No entiendo cual es tu objetivo con querer cargarlo despues, ya que es absurdo, como te decia, todo compilador de C agrega codigo al inicio que carga a todas la variables inicializadas con el valor correspondiente, por lo cual ante un reset vas a tener esos valores si o si en el array. No tiene ningun sentido y ademas puede ser hasta contraproducente hacer eso que estas pensando hacer.

Citar
No puedo crear el array dentro de la funcion, a menos que se pueda y me digais como se hace global dentro de esta
main() y el resto de sus funciones no la reconocerian

Si la vas a usar en distintas funciones creala de forma global ( fuera del main )

Desconectado Berto

  • PIC16
  • ***
  • Mensajes: 191
Re:pregunta simple sobre array
« Respuesta #5 en: 05 de Abril de 2016, 15:29:14 »
Pero bueno si yo un tengo monton de datos (solo variables simples) en el menu de opciones que son mas de 15 + luego que comprenden valores entre 0-100 o 1-300. Imaginate que lata volver a dejar todo como estaba. Que tiene de absurdo incluir en el menu "defecto" para dejarlo todo como estaba inicialmente con + una sola pulasacion de boton

+ Saludable

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:pregunta simple sobre array
« Respuesta #6 en: 05 de Abril de 2016, 21:08:58 »
Uff realmente no se Berto, estamos hablando de una cosa y luego salis con otra.

Estabamos hablando de si existia una mejor forma de inicializar un array, por que lo querias inicializar dentro de una funcion y no cuando lo definias. Independientemente de para lo que vayas a usarlo.

Y ahora me estas hablando de otra cosa totalmente distinta. Como de dejarlo con valores iniciales con la pulsacion de un boton.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re:pregunta simple sobre array
« Respuesta #7 en: 06 de Abril de 2016, 07:29:08 »
puedes crear 2 arrays, uno en rom y otro en ram, entonces en la funcion de inicializarlo rellenas el valor de uno con el otro

Código: [Seleccionar]
int array1[x]={1,2,3,4...};
int arrayram[x];

void func() {
int x;
 for(x=0;x<sizeof(array1);x++) arrayram[x]=array1[x];
}

Desconectado Berto

  • PIC16
  • ***
  • Mensajes: 191
Re:pregunta simple sobre array
« Respuesta #8 en: 06 de Abril de 2016, 16:38:05 »
Si Merlinz es sencillo da toda la sensacion de funcionar con solo verlo. pero ya no me haze falta tampoco sizeof. No es un array dinamico de esos que cambian de tamaño como lei algo en dev c.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re:pregunta simple sobre array
« Respuesta #9 en: 06 de Abril de 2016, 19:29:28 »
No se puede cambiar de tamaño de un array, almenos en C. De todas formas el sizeof() te funcionara en todos los casos, simplemente devuelve el tamaño del array, sino simplemente ponle el numero, pero si cambias el tamaño con sizeof no tendrias que cambiar esta parte nunca mas, y si pones el numero tienes que cambiarlo siempre que cambies el tamaño.