Wpis z mikrobloga

double rad = (M_PI/180.0);
s[i] = (double)(sin(i*rad))*10;

Średni czas wykonania to 2000 taktów.

s[i] = (double)(sin(i*M_PI/180))*10;
To już 2443 takty.
Rozbicie na

s[i] = (double)(sin(i*M_PI/180));
s[i] *= 10;

Kosztuje dodatkowo 29 taktów procesora.

s[i] = (double)(sin(i));
To 1828 taktów. (co daje dla kwarcu 18.432MHz około 99us oraz dla kwarcu 16MHz 114us - różnica około 15 us).
Takie tam, gdybyście potrzebowali wiedzieć ile czasu trwa obliczanie sinusa na AVR to będziecie wiedzieć, że około 100us. To dużo.
ATmega328.
#avr #arduino #gownowpis
  • 4
@a231: Wywaliłem dzielenie i zastąpiłem mnożeniem i zyskałem 440 taktów. Zgadza się. Na LUT nie zawsze jest miejsce. 360 liczb double zajmie 1440 bajtów, niektóre avr tyle nie mają. Poza tym raczej chodziło mi o poznanie tej liczby taktów niż o LUT, o tym wiem doskonale.