Tengo un PIC18F46K22 y el programa con el compilador XC8. En el final, voy a tener un sistema como el de un pc con stdin
y stdout
. Así, en el bucle principal habrá una función que es la comprobación de si hay nueva entrada. Si no hay entrada, una función que será llamada en consecuencia. Así, por ejemplo, cuando la entrada de Una a en stdin
, el PIC ejecuta una función como function_A
en lugar de function_B
que se llama cuando la entrada de una B.
Cuando el PIC se realiza con la función, quiero que la nueva entrada se envía a la función. Así que cuando se pulsa Una abre el RS232 transmisor, a partir de ese momento cada entrada se envían a través de RS232. En el fin del proyecto es de por sí un editor de texto. Así que cuando se pulsa Una se abre el sistema de archivos, a partir de ese momento usted no está de edición de texto más, pero mirando a través de una lista de archivos. Eso significa que pulsando Arriba y Abajo significa algo diferente que en el texto de la edición de medio ambiente.
He hecho un montón de pensamiento sobre cómo este programa en C. yo pensaba que esto de la noche anterior y me gustaría saber si es posible y si es así, cómo. Lo que quiero hacer es:
- El
main
llamadas de función una función comofunction_A
-
function_A
cambios de una variable globalfunction_addr
a la dirección del puntero de funciónin_function_A
- A partir de ese momento,
main
llama a la función enfunction_addr
cuando hay una nueva entrada.
Así que lo que necesita es un main
función que comprueba si function_addr
es cero. Si es así, un 'normal' de la función debe ser llamada, como function_A
. Si no lo es, la función en function_addr
debe ser llamado. También necesito un function_A
que cambios en la function_addr
a un puntero a in_function_A
.
Nota: cuando el sistema de ficheros de la función debe ser cerrado, is_function_A
sólo debe cambiar function_addr
a 0.
Así que básicamente mi pregunta es ¿cómo puedo
- Obtener la dirección de una función (y la almacenamos en una variable)
- Llamar a una función en una dirección especificada