DE_User (06.06.2011 03:53 - 06:21, просмотров: 175) ответил MBedder на Убери деления (замени умножениями), и будет совсем шоколадно
Бeз деления примерно 634 цикла, оптимизация отключена. При частоте семплирования 4000 Гц для ATmega644A и тактовой 10 МГц (потребление 4мА при 3,3В или 13 мВт) загрузка процессора не превысит 30%! Оптимизировать код легко: делители кратны степени 2 (BCoef0 = 16384, DCgain = 16), а четные коэффициенты = 0.
static signed int ACoef0 = 15018;
static signed int ACoef1 = 0;
static signed int ACoef2 = -30036;
static signed int ACoef3 = 0;
static signed int ACoef4 = 15018;
static signed int BCoef0 = 16384;
static signed int BCoef1 = 0;
static signed int BCoef2 = 32238;
static signed int BCoef3 = 0;
static signed int BCoef4 = 15874;
/* for(n=1; n<=NCoef; n++) y[0] += ACoef[n] * x[n] - BCoef[n] * y[n]; */
yy0 += (ACoef2 * xx2) - (BCoef2 * yy2) + (ACoef4 * xx4) - (BCoef4 * yy4);
yy0 = (yy0>>14); // BCoef0 = 16384
yy_out = (yy0>>4); // DCgain = 16
Let's come together right now !