(resent, previously sent from non member account)

First: Is the code correct?

        pos=lrintf(counter);

Shouldn't pos be lower than counter and pos+1 higher? Like this
        pos <= counter < pos+1

        pos = (int)(counter);

=> I use this in my tests.

Second: Why the 'volatile'?
You should never be that timing sensitive that it makes a difference...
(let the producer enter an interrupt and...)

Third: Compilators hates pointers and loves arrays - strange ehh..
Modified the code to this, note the added loop counter.

    int ix;
    for (ix = 0; ix < todo; ix++) {

        pos=(int)(counter);
        counter+=advance_f;

        res = src_ptr[pos];
        res_next = src_ptr[pos+1];
        res += (res_next-res) * (counter-(float)pos);
        res *= volume_f;

        dst_ptr[ix] +=res;
    }


Results:

PIII 933 MHz    volatile        non volatile
pointer dst             5.0 s           4.9 s
array dst               4.5 s           4.1 s

/RogerL

-- 
Roger Larsson
Skellefteċ
Sweden


Reply via email to