Apparently, a bunch of people do not know this (on other platforms, anyhow), so here's your pre-emptive C trvth nvke for the day:
A void* is not guaranteed to be big enough or the right representation for any function pointer type. That is not a guarantee all architectures have and not one the C standard has either.
It's why pedantic compilation yells at you for function pointer -> void* conversions.
Windows, and all POSIX machines, have this guarantee. Embedded almost never does, especially with space-conscious / multi-segmented data spaces.