TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: vasconinicolas en 20 de Abril de 2010, 11:16:59

Título: Puntero a Funcion
Publicado por: vasconinicolas en 20 de Abril de 2010, 11:16:59
Hola gente, de nuevo por estos lados, esta vez tengo una consulta del C, estoy estudiándolo pero aún no llego al final de libro jeje (Aprenda C en 21 dias).
Tengo un programa que recibe datos por RS232. Los caracteres son recibidos y acumulados en un buffer[]. Un ejemplo de lo que recibo: MoverDerecha,100
MoverDerecha es uns instruccion y 100 es el argumento (cuanto moverse a la derecha).
Aqui viene el asunto, la idea es que mi instruccion MoverDerecha llame directamente a una funcion del mismo nombre.
Debido a que tengo muchas instrucciones no quiero hacer 200 if, sino usar los apuntadores a funciones.
Normalmente se hace asi:

void MoverDerecha (int x); // una de las funciones
void MoverIzquierda (int x); // otra
void etc etc

void FuncionX (int x); //declaracion del puntero a funcion

main()
{
    FuncionX = Aca deberia ir el string MoverDerecha o cualquier otro, que yo recibo y guardo en el buffer[] pero no anda
    FuncionX(x); // aca llamo a la funcion que corresponde, en este caso FuncionDerecha
}

Asi como FuncionDerecha voy a tener FuncionIzquierda y muchas otras
Espero que se haya entendido y no repetir pregunta. Busque por el foro pero sin éxito.
Desde ya muchas gracias!
N
Título: Re: Puntero a Funcion
Publicado por: Nocturno en 20 de Abril de 2010, 11:44:02
¿Qué compilador usas?, con CCS no se pueden hacer punteros a funciones.
Título: Re: Puntero a Funcion
Publicado por: vasconinicolas en 20 de Abril de 2010, 11:50:20
Guau.. ciertamente uso CCS 4.104 Dios! tendré que usar otro compilador??? en ese caso podré usar SDCC? voy a pispear aver si soporta puntero a funciones.
Muchas gracias nocturno!!
Título: Re: Puntero a Funcion
Publicado por: migsantiago en 20 de Abril de 2010, 11:55:57
Desconozco cómo se usa un apuntador a función, pero HiTech para pic10/12/16 permite apuntadores a funciones según su manual.

Puedes probar la versión gratuita Lite, es muy buena  :mrgreen:
Título: Re: Puntero a Funcion
Publicado por: vasconinicolas en 20 de Abril de 2010, 12:05:44
migsantiago, lo vamos a probar y avisaremos.. saludos muchachos y mil gracias por su tiempo.
N
Título: Re: Puntero a Funcion
Publicado por: The_Chosen en 20 de Abril de 2010, 12:51:37
Emmm, había leído que la versión 4.106 permite usar apuntadores a funcines. Puedo estar equivocado, ¿alguien puede confirmar?  :mrgreen: :mrgreen:
Título: Re: Puntero a Funcion
Publicado por: vasconinicolas en 20 de Abril de 2010, 13:24:26
Buscando en la pagina de CCS veo esto
4.058  A bug involving pointers to functions is fixed
Dice que en la version 4.058 ya se corrigieron problemas de punteros a funciones, es asi? como que ya existe soporte de puntero a funciones hace raro?
N
Título: Re: Puntero a Funcion
Publicado por: Suky en 20 de Abril de 2010, 18:02:46
CCS permite punteros a funciones según se muestra en unos de sus ejemplos. Mirar EX_QSORT.C



Saludos!
Título: Re: Puntero a Funcion
Publicado por: Nocturno en 20 de Abril de 2010, 18:07:16
Pues menuda novedad, lo hemos discutido en el foro en varias ocasiones y no se podía.
Habrá que probar esas versiones nuevas.
Título: Re: Puntero a Funcion
Publicado por: jeremylf en 26 de Septiembre de 2011, 06:59:19
Estoy medio confundido, lo q nunca me ha dejado dormir era el tema de los punteros a constantes... pero esto de punteros a funciones vendria a ser algo diferente? Se puede engañar al compilador a acer punteros a constantes en base de que ahora si se puede hacer esto de los punteros de funciones ? o como es que no entiendo. Gracias.
Título: Re: Puntero a Funcion
Publicado por: MerLiNz en 26 de Septiembre de 2011, 18:39:31
en C18 se que es asi:

void func(unsigned char x) {
}

void (*Funcion)(unsigned char);

Funcion=func;

el tema de punteros a constantes quiza lo que no te deje dormir es que las consts se guardan en la memoria de programa, e intentes asignar una direccion de memoria de programa a un puntero para ram.
Título: Re: Puntero a Funcion
Publicado por: Suky en 26 de Septiembre de 2011, 18:42:59
Estoy medio confundido, lo q nunca me ha dejado dormir era el tema de los punteros a constantes... pero esto de punteros a funciones vendria a ser algo diferente? Se puede engañar al compilador a acer punteros a constantes en base de que ahora si se puede hacer esto de los punteros de funciones ? o como es que no entiendo. Gracias.

No veo la forma  :undecided:

En CCS generalmente se crea un único arreglo con todos los datos, y se "direcciona" con el offset de los datos actuales a tratar.


en C18 se que es asi:

void func(unsigned char x) {
}

void (*Funcion)(unsigned char);

Funcion=func;

el tema de punteros a constantes quiza lo que no te deje dormir es que las consts se guardan en la memoria de programa, e intentes asignar una direccion de memoria de programa a un puntero para ram.

No confundir, en este caso se trata de CCS  ;-)

Saludos!