Pages: [1]   Go Down
Author Topic: problema creando array multidimensional  (Read 948 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buenas!
mi problema es que intento declarar el tamaño de una array multidimensional leyendo una direccion de la eprom.. pero me da error  smiley-confuse
Code:
const int alertnumber = EEPROM.read(10);
int alertpins[alertnumber][3];
el error es este..

Code:
test:8: error: array bound is not an integer constant
test.cpp: In function 'void loop()':

es porque una array solo se puede declarar con un numero?
si es asi hay alguna manera de hacer lo que quiero??
muchas gracias ^^


Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
creo que para declarar la dimensión de un array tienes que usar una constante (
Code:
integer constant
) y no una variable.
Si detallas un poco más lo quer quieres conseguir, tal vez podamos darte alguna idea.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
creo que para declarar la dimensión de un array tienes que usar una constante (
Code:
integer constant
) y no una variable.
Si detallas un poco más lo quer quieres conseguir, tal vez podamos darte alguna idea.


haber.. lo que quiero hacer es que el programa al arrancar, lea una direccion de la eprom, en la que se define asta que pin debe inicializar como input la placa.. y luego para guardar el valor de esos pines necesito una array cuyo index sea la cantidad de pines que hay.

por ejemplo:
en la direccion de la eprom esta el numero 13,
pues quiero que la array sea array[15][3]
y luego con un bucle for, declararlos como input.. etc etc.. pero el problema esta en que no hay manera de declarar el tamaño de la array leyendo de la epprom :S
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
creo que para eso tendrías que usar punteros:
Code:
  int n,  *alertpins;

  // si haces, por ejemplo
  n = 12;
  // puedes luego asignar sitio en la memoria para 12 int
   alertpins = (int*)malloc( n * sizeof(int));

Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Este es un problema bastante fundamental. Ocurre porque ese array está definida como una "variable global"

Una "variable global" es una variable definida fuera de cualquier función y accesible desde cualquier punto del código, desde el interior de cualquier función. Para el compilador, estas variables son simplemente lugares (direcciones) en la memoria RAM y para compilar el programa necesita saber cuánto espacio debe reservar y en qué sitio está cada variable.

Una posibilidad es usar "asignación dinámica de memoria" con la función malloc() pero se rumorea que el C de Arduino no maneja bien la función free()

Otra posibilidad es declarar esa variable dentro de una función, lo que crea esa variable en el stack, en "tiempo de ejecución". La declaración, por ejemplo int tabla[h][v]; tendría que estar, por ejemplo, dentro de loop()

Code:
loop()
{
int tabla[h][v];
...
...
}

pero eso impediría el acceso directo a ese array por parte de otras funciones y loop() tendría que proporcionarles ese acceso. Por ejemplo:

Code:

funcionJ(int valor)
{
....
}

loop(){
int tabla[h][v];
...
...
funcionJ(tabla[3][5]);

}

Otra posibilidad es usar un array (global) lo bastante grande que cubra el peor de los casos y luego utilizar algún tipo de índice que indique qué parte de la capacidad total del array se está empleando actualmente.



Logged

Pages: [1]   Go Up
Jump to: