#pragma once #include template void ZeroIt(T& value) { memset(&value,0,sizeof(value)); } FUNCTOR_TYPEDEF(MemberProcArg, void, uint32_t); #pragma pack(push, 1) union Revo_handler { // blood, bowels, assembler :) transform functors into a unified view for calling from C voidFuncPtr vp; revo_isr_handler isr; AP_HAL::Proc hp; AP_HAL::Device::PeriodicCb pcb;//\\ this is C not C ++, so we can not declare the support of functors explicitly, and are forced to pass AP_HAL::MemberProc mp; // support of functors explicitly, and are forced to pass MemberProcArg mpa; Handler h; // treat as handle <-- as 64-bit integer uint32_t w[2]; // words, to check. if this is a functor then the high is the address of the flash and the lower one is the address in RAM. // if this is a function pointer then lower word is an address in flash and high is 0 }; #pragma pack(pop)