Arrays locales en AVR-GCC

#1
Cuando creo una array en "main", no sé porque puedo ver ese mismo array en cualquier función sin necesidad de pasarlo por argumento, es como si no fuera local del "main".

Ejemplo:

PHP:
int main()
{
   unsigned char array[2]={1,2};
   ....
   funcion_1(void);
}

funcion_1()
{
   ....
   funcion_2(array);
   ....
}

funcion_2(unsigned char array[])
{
   ....
}
Si hago eso, el AVR Studio lo compila sin problemas :eek:, es como si la función 1 pudiera ver el array definido en main y eso definitivamente no me sirve.

¿Alguien sabe como evitar eso?
 
#2
Cuando creo una array en "main", no sé porque puedo ver ese mismo array en cualquier función sin necesidad de pasarlo por argumento, es como si no fuera local del "main".

Ejemplo:

PHP:
int main()
{
   unsigned char array[2]={1,2};
   ....
   funcion_1(void);
}

funcion_1()
{
   ....
   funcion_2(array);
   ....
}

funcion_2(unsigned char array[])
{
   ....
}
Si hago eso, el AVR Studio lo compila sin problemas :eek:, es como si la función 1 pudiera ver el array definido en main y eso definitivamente no me sirve.

¿Alguien sabe como evitar eso?
No conozco ese compilador, igual digo una burrada pero probaste a utilizar la definición "private".

private unsigned char array[2]={1,2};

un saludo
 
#3
El compilador no me reconoce ese tipo de variables.

Lo más raro es que si creo un proyecto nuevo y hago lo de arriba, no me deja compilarlo (como corresponde), pero en mi proyecto eso no se da.

Por lo que averigüe en google, eso se puede dar si queda poco espacio en la memoria RAM, algo que no me sucede.

Por otro lado, en vez de usar prototipos como cabecera, directamente agregó las funciones de los distintos archivos fuentes usando includes, algo así:

PHP:
#include "funcion_1.c"
#include "funcion_2.c"

int main()
{
   unsigned char array[2]={1,2};
   ....
   funcion_1(void);
}
Y cada archivo contiene las funciones previamente mencionadas. ¿Eso puede afectar?
 
#4
Yo lo hice en avr studio 6 y me arrojo el error que esperaba recibir. "No se ha definido la variable array".

La verdad no se que podría estar pasando porque a la hora de compilar en el simple análisis de la sintaxis provocaría un error.

Sola una pregunta, en el programa real si pusiste el tipo de dato que retorna la funcion "funcion_1" y la "funcion_2".

A y es mejor usar el prototipo porque asi evitas pasar datos incorrectos a las funciones, es decir a la hora de compilar si tu le estas mandando un char y deberia ser un int el compilador de indica el error.

Se me olvida decirte que procures no anidar mas de 3 funciones porque luego el programa hace cosas raras
 
#5
Al final descubrí donde estaba el error (ba, descubrí es una forma de decir, me "hicieron" descubrir :LOL:).

La MACANA que me mandé fue el hecho de evitar un archivo con todos los defines que uso, para lo cual yo hacía esto:

PHP:
....
#include "archivo1.c"
#include "archivo2.c"
... etc

int main()
{
  .... //Un par de defines usados para los indices de los arrays que creé en main
  unsigned char array["n"]={inicialización};
  
  #include "archivo3.c" // Acá es donde me mandaba la cagada, yo ponía el include dentro del main, debido a los includes, el error estaba ahí, ya que toooodas las funciones que esten dentro de "archivo3.c" pueden ver "array".
  ...
}
Solución:

PHP:
....
#include "defines.c"
#include "archivo1.c"
#include "archivo2.c"
#include "archivo3.c"
... etc

int main()
{  
  unsigned char array["n"]={inicialización};  
  ...
}
O sea, como verán la cagada fue mía y no del compilador y esto me pasa por no saber como agregar los archivos "source.c" en la ventana del proyecto.

Se me olvida decirte que procures no anidar mas de 3 funciones porque luego el programa hace cosas raras
Yo suelo hacer mucho eso, ¿decís que genera código extraño?
 
Última edición por un moderador:

Temas similares


Arriba