Autor Tema: Punteros, ¿utilidad limitada?  (Leído 3945 veces)

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

Desconectado smrz

  • PIC10
  • *
  • Mensajes: 20
Punteros, ¿utilidad limitada?
« en: 07 de Junio de 2012, 06:04:41 »
Buenos días,

Hoy estaba mirando unos códigos que había programado y me ha surgido la siguiente duda. Entiendo la ventaja de usar los punteros para devolver varios valores frente a un return por ejemplo,  pero la principal ventaja que se le atribuye a los punteros es su velocidad, ya que no es lo mismo tratar un puntero de 8bits frente a una variable que es una imagen. Sin embargo, en los microcontroladores el mayor uso que hacemos son variables de 8 bits, y el tamaño del putero deberá ser también de 8 bits (menos que un int8 o short int es un bool), por lo tanto no ganaríamos velocidad ni ahorro de memoria...entonces ¿existe alguna otra razón de peso para tratar las variables con punteros?

Como es evidente, para controlar GLCD, pantallas táctiles... sería mucho más cómodo usar punteros.

Saludos...y a ver que pensáis vosotros...
En resumen... senos y cosenos

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Punteros, ¿utilidad limitada?
« Respuesta #1 en: 08 de Junio de 2012, 23:34:47 »
.... en los microcontroladores el mayor uso que hacemos son variables de 8 bits, y el tamaño del putero deberá ser también de 8 bits (menos que un int8 o short int es un bool), por lo tanto no ganaríamos velocidad ni ahorro de memoria.......

¿podrías explicar mejor eso de que no se ganaría velocidad ni ahorro de memoria?

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Punteros, ¿utilidad limitada?
« Respuesta #2 en: 08 de Junio de 2012, 23:56:43 »
un puntero es unicamente una variable que apunta a determinada direccion de memoria pero no ahorra memoria. La rapidez suele ser porque en C al acceder a un puntero en vez de un array suele ser mas rapido (no se si en CCS es igual). El tamaño del puntero viene determinado por la direccion de memoria (near o far), por ejemplo para acceder a las memorias menor a 0xFF con un puntero de 8bits sobra, sin embargo para mas de esa localizacion se requieren punteros mayores. De todas formas el tamaño lo determina automaticamente el compilador. Todo esto es independiente a que quieras usar un puntero con 8-16-32bits...

Por ejemplo:

char variable[100]; //esta variable contiene 100 chars (8bits) osea 100bytes o 800bits
char *puntero=&variable; //puntero apunta a la direccion de memoria de "variable" en el index 0.
*puntero=90; //le asignamos a la direccion que apunta puntero un 90, por lo cual cuando leamos variable[0] contendra 90.
*puntero+10=33; //ahora escribimos en la direccion puntero+10, osea variable[0+10]=33

tambien podemos trabajar con 16bits a la vez mediante punteros:
int *puntero=(int*)&variable;
*puntero=65535; //asi trabajamos con los 16bits, lo que quedaria aqui seria variable[0]=255 y variable[1]=255
*puntero+10=0x3040; //al estar trabajando en 16bits los incrementos de memoria serian de 2 en 2, en este momento estariamos asignando a variable[20]=0x40 y variable[21]=0x30

Y asi entre otras muchas utilidades. Los punteros son muy utiles para algunas cosas, pero no ahorran memoria, quizas menos instrucciones si (acceso mas rapido) solo si se usan bien.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Punteros, ¿utilidad limitada?
« Respuesta #3 en: 09 de Junio de 2012, 11:50:38 »
.... en los microcontroladores el mayor uso que hacemos son variables de 8 bits, y el tamaño del puntero deberá ser también de 8 bits ..

Error, el puntero apunta a una variable de 8-bits, pero en si el puntero puede ser una variable de 24-bits, 32-bits, depende.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado smrz

  • PIC10
  • *
  • Mensajes: 20
Re: Punteros, ¿utilidad limitada?
« Respuesta #4 en: 11 de Junio de 2012, 08:47:22 »
Me he exprsado mal, cuando hablo de que el puntero tiene 8bits, he dado por hecho de que usaremos una memoria de tamaño 0xFF, que no tiene por qué ser así. Ni tampoco usaremos variables de 8bits siempre.
Lo que quería decir, es que salvo casos puntuales, normalmente la memoria del micro tendrá mas de 8bits de direcciones (a no ser que dividamos la memoria) y las variables que usamos (normalmente) serán de 8bits, por lo que el uso de punteros no suele ser ideal siempre.

He abierto este post porque hablaba con un amigo el otro día sobre esto y me decia que el uso de punteros es indispensable, y yo creo que depende de nuestro objetivo...
En resumen... senos y cosenos

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Punteros, ¿utilidad limitada?
« Respuesta #5 en: 11 de Junio de 2012, 14:07:22 »
porque no? aunque tengas una direccion de 16bits, 24, 32... los punteros siguen siendo igual de utiles y funcionando igual de bien con direcciones mayores a 8bits.

Desconectado PFER90

  • PIC10
  • *
  • Mensajes: 17
Re: Punteros, ¿utilidad limitada?
« Respuesta #6 en: 11 de Junio de 2012, 14:46:37 »

tambien podemos trabajar con 16bits a la vez mediante punteros:
int *puntero=(int*)&variable;


Hola, manejo algo del C pero acá me dibujaron (con nada  :D), ¿por que la definición anterior hace que manejemos datos de 16Bits?. ¿Con algua definición similar se pueden usar más bits?

gracias
 

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Punteros, ¿utilidad limitada?
« Respuesta #7 en: 11 de Junio de 2012, 15:03:00 »
Porque int en C18 es una variable de 16-bits.
No contesto mensajes privados, las consultas en el foro

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Punteros, ¿utilidad limitada?
« Respuesta #8 en: 11 de Junio de 2012, 15:27:20 »
Hola posiblemente entre como off-topic, lo leí recientemente de un guru ...

La mayor ventaja de C es su flexibilidad ... La principal desventaja también es su flexibilidad

Muy cierto ....

Saludos !

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Punteros, ¿utilidad limitada?
« Respuesta #9 en: 11 de Junio de 2012, 15:28:05 »
si, hasta 32bits en C18, en CCS no se que definicion usan, pero en C18 seria "long" osea:

long *variable; //puntero de 32bits
long variable; //variable de 32bits

en C30 admite hasta 64bits
long long *variable; //puntero
long long variable; //variable