>> However, IMHO a more elegant C++ solution would be to define 
>> the interrupt
>> handler as a private function within the class. 
 
> Avr-gcc is expecting a fixed name for the vector. See avr-libc for how
> the ISR macro is defined.
>
> Note that there is no C++ maintainer for AVR GCC.
> 
> Eric Weddington

Sorry - I forgot to say the problem lies with C++ mangling function names,
so if the private class method is, say:

    void TIMER0_OVF_vect(void) __attribute__ ((signal, __INTR_ATTRS))
    {
        Flags |= TIMER0_OVERFLOW;   // indicate the event type
        TCNT0 = TIMER0_TIMEOUT;     // restart the timeout
    }

avr-gcc helpfully replies with:

Main.c(28): warning: '_ZN7cTimer011__vector_16Ev' appears to be a misspelled
signal handler

and of course does not bother to link the handler. Manually adding the line:


ISR_ALIAS(TIMER0_OVF_vect, _ZN7cTimer011__vector_16Ev);

after the class definition makes everything work, but my question is: is it
possible to do this without the cutting and pasting? 

Ron Kreymborg




_______________________________________________
AVR-chat mailing list
AVR-chat@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-chat

Reply via email to