TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Diego E. en 24 de Abril de 2009, 18:22:33

Título: ARRAY
Publicado por: Diego E. en 24 de Abril de 2009, 18:22:33
Hola grupo
hay alguna forma de poner todos los componentes de un array en ceros "limpiarlos", no tener que limpiar uno tras otro.

eje: char  variable[10]  //quiero limpiar todos los componentes de esta variable matriz

gracias.
Título: Re: ARRAY
Publicado por: gera en 24 de Abril de 2009, 18:45:20
en la biblioteca string.h existe una funcion q se llama memset()
void * memset ( void * ptr, int value, size_t num );
ptr es el puntero a tu arreglo, value es el valor con el cual lo queres llenar (en tu caso 0), y num es el tamaño en bytes de tu arreglo, q podes obtenerlo haciendo un sizeof()
memset(variable, 0, sizeof(variable));
saludos!!!
Título: Re: ARRAY
Publicado por: migsantiago en 24 de Abril de 2009, 19:42:53
La directiva #zero_ram pone a ceros toda la memoria que declares en tu programa. Solo lo hace al empezar la ejecución del programa.

Todo lo anterior usando CCS.
Título: Re: ARRAY
Publicado por: Diego E. en 25 de Abril de 2009, 13:55:50
gera, migsantiago, gracias por las respuetas,

probé con ambas y funcionan correstamante, la diferencia es que zero_ram borra todo y con memset afecto parciales, de todos modos es lo que necesito.

mil gracias.
Título: Re: ARRAY
Publicado por: gera en 25 de Abril de 2009, 15:25:00
Cuando quieras!
Me parece q cuando tenga un tiempito voy a hacer un tutorial o una guia sobre manejo de strings en C. Preguntas como estas son muy comunes jeje.
Título: Re: ARRAY
Publicado por: jeremylf en 09 de Febrero de 2010, 13:39:00
zero_ram pone a 0 todas las variables declaradas dentro del main (locales) y las que estan fuera (globales) ?


Gracias.
Título: Re: ARRAY
Publicado por: MLO__ en 09 de Febrero de 2010, 14:51:31
Tambien.
Título: Re: ARRAY
Publicado por: migsantiago en 09 de Febrero de 2010, 15:07:47
Vagamente recuerdo que toda variable global siempre se inicializa a cero automáticamente al iniciar el programa. Las que sí se deben inicializar a cero manualmente son todas las demás.

¿Alguien podría confirmarlo?
Título: Re: ARRAY
Publicado por: RICHI777 en 09 de Febrero de 2010, 15:32:17
Por lo menos en el ANSI C, todas las variables globales no inicializadas ( ejemplo int Pepe; ) se deben colocar a 0 antes de llamar al main, las globales inicializadas ( ejemplo int Juan = 5; ) deben tener el correcto valor antes de llamar al main. Con respecto a la pregunta original yo recomendaria usar el memset es ANSI y portable.

Saludos !
Título: Re: ARRAY
Publicado por: PalitroqueZ en 09 de Febrero de 2010, 16:06:43
Vagamente recuerdo que toda variable global siempre se inicializa a cero automáticamente al iniciar el programa. Las que sí se deben inicializar a cero manualmente son todas las demás.

¿Alguien podría confirmarlo?

en ccs y con static, si

http://www.todopic.com.ar/foros/index.php?topic=18647.msg135680#msg135680

Título: Re: ARRAY
Publicado por: MLO__ en 09 de Febrero de 2010, 16:55:22
A mi me inicializa todas las variables globales a cero con #zero_ram. Casi no uso variables locales .... solo los contadores pero los uso en ciclos for, por lo que esos casi siempre comienzan en ceros ...  :P

Saludos
Título: Re: ARRAY
Publicado por: jeremylf en 09 de Febrero de 2010, 20:27:27
Pero el usar static tiene otra consecuencia por decir algo. Es decir, las variables (globales o locales) quedan almacenadas para siempre en una poscicion fija cuando se usa static no? Eso no podria causar un aumento de la RAM o algo parecido?
Título: Re: ARRAY
Publicado por: PalitroqueZ en 09 de Febrero de 2010, 20:34:23
Pero el usar static tiene otra consecuencia por decir algo. Es decir, las variables (globales o locales) quedan almacenadas para siempre en una poscicion fija cuando se usa static no? Eso no podria causar un aumento de la RAM o algo parecido?

según Don Diego, sip.

http://www.todopic.com.ar/foros/index.php?topic=18647.msg135732#msg135732

Título: Re: ARRAY
Publicado por: Suky en 09 de Febrero de 2010, 23:31:40
Exactamente, se reserva el lugar en la memoria. Son variables que a diferencia de las globales solo pueden ser utilizadas dentro de la función. Aquí  (http://www.todopic.com.ar/foros/index.php?topic=28464.0)se trato el tema


Saludos!