I have following problem:
I would like to make use of 40 bit accumulator and MAC units in BF592.
So I´ve written following function:
/* guaranteed to accumulate in 40 bits */
fract32 macPwr(fract16 a, fract16 b, short n)
long long sum1 = 0;
long long sum2 = 0;
for (i = 0; i < n; ++i)
/* An += Rx.lh * Ry.lh (IS) preserving the whole accumulator
sum1 = A_mac_IS(sum1, a[i], a[i]);
sum2 = A_mac_IS(sum2, b[i], b[i]);
However, I need to enable optimization switch in the compiler to have expected performance.
The problem is that optimization switch is messing up with my SPI and I2C drivers so is it
possible to write that function in the way I don't need to enable that optimization?
Should I write it in assembly? If yes are they some examples?
Why optimization switch in compiler causes SPI and I2C problems?