Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/02/2013 #1

Avatar de cosmefulanito04

Arrays locales en AVR-GCC
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:

Código 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 , 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?
22/02/2013 #2

Avatar de Basalto

cosmefulanito04 dijo: Ver Mensaje
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:

Código 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 , 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
22/02/2013 #3

Avatar de cosmefulanito04

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í:

Código 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?
23/02/2013 #4

Avatar de Ajna

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
23/02/2013 #5

Avatar de cosmefulanito04

Al final descubrí donde estaba el error (ba, descubrí es una forma de decir, me "hicieron" descubrir ).

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:

Código 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:

Código 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?
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.