TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
-
¿Qué compilador usas?, con CCS no se pueden hacer punteros a funciones.
-
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!!
-
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:
-
migsantiago, lo vamos a probar y avisaremos.. saludos muchachos y mil gracias por su tiempo.
N
-
Emmm, había leído que la versión 4.106 permite usar apuntadores a funcines. Puedo estar equivocado, ¿alguien puede confirmar? :mrgreen: :mrgreen:
-
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
-
CCS permite punteros a funciones según se muestra en unos de sus ejemplos. Mirar EX_QSORT.C
Saludos!
-
Pues menuda novedad, lo hemos discutido en el foro en varias ocasiones y no se podía.
Habrá que probar esas versiones nuevas.
-
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.
-
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.
-
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!