I use function pointers to loop through state machines.
They are declared global as:

void (*mdb_thread)(void);
void (*main_thread)(void);

Following code is problematic:

// wait for transmission completed and start timeout then
void mdb_watch_transmit(void)
{
    if(transmit_ok)
    {
        timeout_start_5s();
        transmit_ok = 0;
        mdb_thread = &mdb_watch_after_transmit();
    }
}

// wait for timeout or reception of data
void mdb_watch_after_transmit(void)
{
    if( timeout() )
    {
        main_thread = &reset();
        mdb_thread = &mdb_watch_transmit(); // famous line 79 from the error
    }
}

The function prototypes exist in a header file included in the c file.

The error:

mdb_rs232.c:79: error 47: indirections to different types assignment  
from type 'void near* '
to type 'void function    ( )  code* '
make: *** [mdb_rs232.rel] Error 1

In the first function he doesn't complain but in the second he does :s
As far as i can see i do nothing different, just passing the adres of a function to it and both functions are the same type (void/void) so i can't see whats the problem.

The function pointers are executed in a while 1 loop in the main function in another file, there are those pointers prototyped but with the extern keyword since i declare them in this file where the functions are written.

Any thoughts?

Cheers

Bart