こんな記事を見つけた。
| Arduinoでダイナミック点灯を制御していると思うのが「Arduinoって遅いなあ」ということです。 私は最初、16MHzだからあまり困ることはないと思っていましたが、最近困ることが多いです。 そこでAVR寄りの書き方にすることで自分なりに高速化することにしました。 Arduinoの高速化 - なんでも独り言 | 電子工作とか「つくる」のが好きな人の日々 |
こんな感じに書くと高速化できるらしい。
|
1 |
PORTD |= _BV(5); // PD5をHIGHに |
|
1 |
PORTD &= ~_BV(5); // PD5をLOWに |
|
1 |
int val = PIND & _BV(2); |
複数のピンの状態を一度に変更することもできる。
|
1 2 |
PORTD |= _BV(5) | _BV(6) | _BV(7); PORTD &= ~(_BV(5) | _BV(6) | _BV(7)); |
これとか結構便利そう。
|
1 |
PORTD = 0b1010000; // PD5だけHIGHに、他はLOWに変更 |
へぇ〜こんなことできるんだ、知らなかったなぁ。
てかdigitalwriteってそんなにサイクル数かかるのね
比較した差が断然すぎてびっくりだ!
まぁ確かにこの方法に慣れればAVRマイコンを生で触るハードルが下がるのも分かるけど、慣れるまで普通に時間かかりそうね・・・
沼にはまる予感がプンプンしやがる
まぁ、気になった人は参考にしたブログに行ってみてね、どれくらい高速化できたかオシロで計測した結果を掲載してる。
