Followup: No, doesn't work - you can't extern "C" a member function. You also can't alias a regular function to a non-mangled class function name, which was another line of thought for me. My solution:
#define CLASS_ISR(vector, ...) { vector(); } ISR(vector, __VA_ARGS__) That can be applied to any member function in the C file, of any name. Example: Test.h: #include <avr/interrupt.h> class Test { public: Test(); ~Test(); private: void ADC_vect(void); }; Test.cpp: #include "Test.h" Test::Test(void) { Test::ADC_vect(); } Test::~Test(void) { } #define CLASS_ISR(vector, ...) { vector(); } ISR(vector, __VA_ARGS__) void Test::ADC_vect(void) CLASS_ISR(ADC_vect, ISR_BLOCK) { PORTC = 0xFF; } Which means you can name the function anything, and it should be accessible as a normal function, but also link in as an ISR. As I can't seem to get the intermixed assembly listing, I can't see how effective it is, but it should allow you to call the ISR by the member function name you give it, with either no penalty at all (if the optimizer inlines it) or a small penalty of a JUMP instruction. Not elegant, but that's the best you can get I think without resorting to custom tools or compile scripts. - Dean _______________________________________________ AVR-libc-dev mailing list AVR-libc-dev@nongnu.org http://lists.nongnu.org/mailman/listinfo/avr-libc-dev