Autor Tema: Puntero a Funcion  (Leído 4685 veces)

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

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Puntero a Funcion
« 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
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Puntero a Funcion
« Respuesta #1 en: 20 de Abril de 2010, 11:44:02 »
¿Qué compilador usas?, con CCS no se pueden hacer punteros a funciones.

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Puntero a Funcion
« Respuesta #2 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!!
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Puntero a Funcion
« Respuesta #3 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:

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Puntero a Funcion
« Respuesta #4 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
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado The_Chosen

  • PIC12
  • **
  • Mensajes: 51
Re: Puntero a Funcion
« Respuesta #5 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:

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Puntero a Funcion
« Respuesta #6 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
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Puntero a Funcion
« Respuesta #7 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!
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Puntero a Funcion
« Respuesta #8 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.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Puntero a Funcion
« Respuesta #9 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.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Puntero a Funcion
« Respuesta #10 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.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Puntero a Funcion
« Respuesta #11 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!
No contesto mensajes privados, las consultas en el foro