Daniel,
In my case, I want to pass a function pointer in as the "void *context" parameter of an existing API. In order for that to work, the function needs to be in non-banked memory so it fits in the 16-bit void pointer and I can cast it back out to the function pointer.
I would like to say that it's inconvenient to require pragmas to force a function into non-banked memory, and it certainly makes writing code that compiles on multiple embedded platforms more difficult -- I need to wrap the pragmas in #if/#endif blocks so they only apply on the Freescale target.
Regarding the function pointer declaration, after reading up on error C18005, I've learned that this is the correct syntax for a near pointer to a near function:
typedef int __near (* __near foo_fn)( int param);
If the return type is a far pointer though, it gets ugly:
typedef void __near * __far (* __near bar_fn)( int param);
Come on. It's so confusing that the help file even gets it wrong on the page for "The __near keyword" (see my first message in this thread).