This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Pointer to function problems

Hi,

This post is about the classic problem creating pointers to function using the overlay procedure.

The reference in the manual suggest the OVERLAY directive to modify the call tree that is automatically generated by the linker. But what happeneds if we don't know the name of the indirect function the pointer calls? Yes this is true.

Consider the possibility of someone who try to build a lib. And this lib provide a function(funA) that calls an afterwards user defined procedure unknown by the lib function(funA). Here an example

//lib_file.h
// ...
typedef void (* Tpfun)(void);
void module_init (Tpfun pf);
void module (void);
// ...

//lib_file.c
static Tpfun    pfun;
//--------------------------------
void module_init (Tpfun pf)
{
        pfun = pf;
}
//----------------------
void module (void)
{
        //code
        // ...
        pfun();
        // code
}

In this simple program there is no call to module_init(&..) and it is impossible to know the address/name of the indirect function and so it is also impossible to use the OVERLAY directive(i think). We know only the pointer to function "pfun". We also don't know if the indirect function call other functions.
The only way to know the name of the indirect function is when the lib user decide to use the module and initializes the module using the module_init(&..);

But how can we build the lib so the user uses it???

The question is:

1)Is there a way to modify the call tree that is automatically generated by the linker in order to include the indirect function?
And if there is no way.
2)How can someone enable the normal way of function call using the stack?

I'm using the eval version C51 8.08

0