最終更新:2010-02-27 (土) 10:08:20 (5171d)  

Arduino/高速化
Top / Arduino / 高速化

http://jp.makezine.com/blog/2009/11/speeding_up_arduinos.html

Arduinoを速くするワザ

たしかに、Arduinoには遅いところがある。なかでもdigitalWriteコマンドはかなり遅い。LEDを1回だけ点灯させるスイッチ回路などでは気がつかないかもしれないが、TLC5947? PWMを使おうとしたときは実感した。これは、Arduinoに毎回288バイトのシフト?を要求する。各バイトは約12回のdigitalWriteを要求するため、TLC5947に新しいデータをシフトインするごとに、総計で3456回のdigitalWritesが行われることになる。どのくらい時間がかかるか? digitalWriteだけで30秒だ! しかし、これには解決策がある。"true c"スタイルのコマンドを使うのだ。AVR GCC(GNU C コンパイラー)が使ってるものだ。Arduinoの頭脳にはATmega168またはATmega328が使われている。AVRコミュニティーでは、通常、これらのCプログラムには"true c"コマンドを使っているからだ

  while (1) {
    digitalWrite(3, 1);
    digitalWrite(3, 0);
  } 

だと106.8KHz

  cli();
  while (1) {
    PORTD |= 0x8;
    PORTD &= ~0x8;
  } 

だと2.667MHz

参考