I have a PIC18F46K22 and program it with the XC8 compiler. In the end, I'll have a system like a pc with stdin and stdout. So in the main loop there will be a function which is checking if there is new input. If there's input, a function will be called accordingly. So for example when I input an A on stdin, the PIC will run a function like function_A instead of function_B which is called when I input a B.
When the PIC is done with the function, I want that the new input is sent to the function. So when pressing A opens the RS232 transmitter, from that moment every input will be sent over RS232. In the end the project is a stand-alone text editor. So when pressing A opens the file system, from that moment you aren't text editing anymore but looking through a list of files. That means that pressing Up and Down means something different than in the text-editing environment.
I've done a lot thinking on how to program this in C. I thought this up last night and would like to know if it's possible and if so, how. What I want to do is:
- The
mainfunction calls a function likefunction_A function_Achanges a global variablefunction_addrto the address pointer of functionin_function_A- From that moment,
maincalls the function atfunction_addrwhen there is new input.
So what I'd need is a main function which checks if function_addr is zero. If it is, a 'normal' function should be called, like function_A. If it isn't, the function at function_addr should be called. I also need a function_A which changes the function_addr to a pointer to in_function_A.
Note: when the filesystem function should be closed, is_function_A should just change function_addr to 0.
So basically my question is how can I
- Get the address of a function (and store it in a variable)
- Call a function at a specified address
Answer
A function
int f(int x){ .. }
Get the address of a function (and store it in a variable)
int (*fp)(int) = f;
Call a function at a specified address
int x = (*fp)( 12 );
No comments:
Post a Comment