16
2016-Feb
[AVR] 16MHz 클럭의 연산자별 연산속도 측정
작성자: Blonix
IP ADRESS: *.148.87.98 조회 수: 1686
정확한 수치는 다소 차이가 날 수 있으나 연산자별 속도 비교정도는 할 수 있겠다.
이게 사실 큰 의미없는 속도이긴 한데, 임베디드 개발시에는 은근히 이런 자잘한게 신경쓰인다.
부들부들..
======================================================
출처 :: http://cielab.ze.am/220344242831
아두이노,얼마나 빠를까요? volatile 명령어와 반복문을 사용해 알아보았습니다.
참고-5% 내외의 오차가 있을 수 있음,1,000,000us=1000ms=1sec,16Mhz에서 1clock=0.0625us
| unsigned long 자료형 | unsigned int 자료형 | unsigned char 자료형 |
a++,a-- | 1.25us(20clock) | 0.63us(10clock) | 0.317us(5clock) |
a<b,a==b,a>b,... | 0.56us(9clock) | 0.25us(4clock) | 0.125us(2clock) |
a=b | 1.00us(16clock) | 0.50us(8clock) | 0.250us(4clock) |
c=a+b,c=a-b | 1.75us(28clock) | 0.87us(14clock) | 0.438us(7clock) |
c=a*b | 6.13us(98clock) | 1.38us(22clock) | 0.625us(10clock) |
c=a/b,c=a%b | 39.13us(626clock) | 13.13us(210clock) | 5.375us(86clock) |
a=~b | 1.25us(20clock) | 0.63us(10clock) | 0.375us(5clock) |
a=b|c,a=b&c,a=b^c | 1.75us(28clock) | 0.87us(14clock) | 0.438us(7clock) |
| long 자료형 | int 자료형 | char 자료형 |
c=a*b | 6.06us(97clock) | 1.38us(22clock) | 0.625us(10clock) |
c=a/b | 38.88us(622clock) | 14.31us(229clock) | 14.313us(229clock) |
| float,double 자료형 |
a<b,a>b,a=b,... | 1.00us(16clock) |
a=b | 1.00us(16clock) |
c=a+b,c=a-b | 8.63us(138clock) |
c=a*b | 9.88us(158clock) |
c=a/b | 31.00us(496clock) |
실수형에서 정수형으로 | 5.94us(95clock) |
정수형에서 실수형으로 | 4.38us(70clock) |
while(1) | 0.38us(6clock) |
if(1) | 0.00us(0clock) |
digitalWrite(a,b) | 5.00us(80clock) |
a=digitalRead(b,c) | 4.19us(67clock) |
analogWrite(pwmpin,b) | 7.81us(125clock) |
a=analogRead(b,c) | 114.21us(1757clock) |
delay(0) | 5.56us(89clock) |
Serial.print("") 보드레이트 9600에서 | 5.25us(84clock) |
a=millis() | 1.69us(27clock) |
servo.write(b) | 62.50us(1000clock) |
a=sin(b) | 114.14us(1756clock) |
a=cos(b) | 118.30us(1820clock) |
a=tan(b) | 119.08us(1832clock) |
a=log(b) | 158.60us(2440clock) |
a=pow(b,c) | 355.42us(5468clock) |
a=asin(b) | 128.12us(1971clock) |
a=atan2(b,c) | 176.67us(2718clock) |