출처 : https://blog.naver.com/ann_arbor/221354729514
빨리 처리해야 되는 프로그램의 경우 void loop () { } 문에 들어간 명령어들이 처리되는 속도가 어떤지를 알아볼 필요가 있는데,
예를 들어 아날로그 입력신호가 엄청 많이 들어오고 출력으로 도트매트릭스 문자를 스크롤시킨다거나 할때 메인 루프 시간을
적절하게 잡아줘야 하는데, 대충 시간이 어느정도 걸리는지 알아야 여유있게 10㎳로 할지 아니면 1㎳ 로 설정할지를 결정할수 있다.
그래서 네이버 검색을 하고 나니 친절하게 정리된 블로그가 있어 여기로 옮기면서 정리하였다.
avr이나 pic시리즈의 명령어보다 많이 걸리는 것 같은데 나누기는 이외로 시간이 많이 걸린다. (100/10 이면 0이 떨어질때까지 계속 뺄셈 루프를 돈다.)
아마 shift (번지수 이동)명령어의 조합이기 때문에 그렇겠지만 너무 많이 걸린것이 사실상이다.
제일 긴 것은 pow... 지수 계산....
일일이 이러한 함수들의 프로그램을 직접 안짜고 그냥 사용할수 있다.
출처 : http://cielab.ze.am/221098630590 (깨진링크, 아카이브 통해 보니 네이버 블로그로 연결되어 있음을 알수 있다.)
보정된 출처 : https://blog.naver.com/7dk2p/221420454739 (찾아 다녔고, 보정된 출처로 대체하고 정리 하였다.)
아두이노, 얼마나 빠를까요? volatile 명령어와 반복문을 사용해 알아봤다.
참고로, -5% 내외의 오차가 있을수 있음. 1,000,000 ㎲ = 1000 ㎳ = 1 s, 16Mhz 에서 1 clock = 0.0625 ㎲
|
ulong
|
uint
|
uchar
|
a++, a--
|
1.25 ㎲ ( 20 clock )
|
0.63 ㎲ ( 10 clock )
|
0.317 ㎲ ( 5 clock )
|
a<b, a==b, …
|
0.56 ㎲ ( 9 clock )
|
0.25 ㎲ ( 4 clock )
|
0.125 ㎲ ( 2 clock )
|
a=b
|
1.00 ㎲ ( 16 clock )
|
0.50 ㎲ ( 8 clock )
|
0.250 ㎲ ( 4 clock )
|
c=a+b, c=a-b
|
1.75 ㎲ ( 28 clock )
|
0.87 ㎲ ( 14 clock )
|
0.438 ㎲ ( 7 clock )
|
c=a*b
|
6.13 ㎲ ( 98 clock )
|
1.38 ㎲ ( 22 clock )
|
0.625 ㎲ ( 10 clock )
|
c=a/b,c=a%b
|
39.13 ㎲ ( 626 clock )
|
13.13 ㎲ ( 210 clock )
|
5.375 ㎲ ( 86 clock )
|
a=~b
|
1.25 ㎲ ( 20 clock )
|
0.63 ㎲ ( 10 clock )
|
0.375 ㎲ ( 5 clock )
|
a=b|c, a=b&c, …
|
1.75 ㎲ ( 28 clock )
|
0.87 ㎲ ( 14 clock )
|
0.438 ㎲ ( 7 clock )
|
|
long
|
int
|
char
|
c=a*b
|
6.06 ㎲ ( 97 clock )
|
1.38 ㎲ ( 22 clock )
|
0.625 ㎲ ( 10 clock )
|
c=a/b
|
38.88 ㎲ ( 622 clock )
|
14.31 ㎲ ( 229 clock )
|
14.31 ㎲ ( 229 clock )
|
|
float, double
|
a<b, a==b, …
|
1.00 ㎲ ( 16 clock )
|
a=b
|
1.00 ㎲ ( 16 clock )
|
c=a+b, c=a-b
|
8.63 ㎲ ( 138 clock )
|
c=a*b
|
9.88 ㎲ ( 158 clock )
|
c=a/b
|
31.00 ㎲ ( 496 clock )
|
실수 → 정수 |
5.94 ㎲ ( 95 clock ) |
정수 → 실수 |
4.38 ㎲ ( 70 clock ) |
while(1) |
0.38 ㎲ ( 6 clock ) |
digitalWrite(a,b) |
5.00 ㎲ ( 80 clock ) |
a=digitalRead(b) |
4.19 ㎲ ( 67 clock ) |
analogWrite(a, b) |
7.81 ㎲ ( 125 clock ) |
a=analogRead(i) |
114.00 ㎲ ( 1757 clock ) |
delay(0) |
5.56 ㎲ ( 89 clock ) |
Serial.print("") |
5.25 ㎲ ( 84 clock ) |
a=millis() |
1.67 ㎲ ( 27 clock ) |
Servo.write(b) |
62.50 ㎲ ( 1000 clock ) |
a=sin(b) |
114.00 ㎲ ( 1756 clock ) |
a=cos(b) |
118.00 ㎲ ( 1820 clock ) |
a=tan(b) |
119.00 ㎲ ( 1832 clock ) |
a=log(b) |
159.00 ㎲ ( 2440 clock ) |
a=pow(b, c) |
355.00 ㎲ ( 5468 clock ) |
a=asin(b) |
128.00 ㎲ ( 1971 clock ) |
a=atan2(b, c) |
177.00 ㎲ ( 2718 clock ) |
|

|