Many of the newer AVRs, Tiny88 for example, let you dynamically change
the CPU clock
frequency.  However the AVR-LibC based delays always assume
a fixed frequency based on F_CPU.

I'll always know what frequency I'm at when I call a delay() function.

Is there a way of doing:

 _delay_us( double __us, uint32_t f_cpu )

and still have the compiler generate code that does not
invoke floating point at run time?

I could make a delay function for each clock frequency,
but that seems less than optimal.


Current function for way of example from delay.h:

void
_delay_us(double __us)
{
        uint8_t __ticks;
        double __tmp = ((F_CPU) / 3e6) * __us;
        if (__tmp < 1.0)
                __ticks = 1;
        else if (__tmp > 255)
        {
                _delay_ms(__us / 1000.0);
                return;
        }
        else
                __ticks = (uint8_t)__tmp;
        _delay_loop_1(__ticks);
}


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

Reply via email to