広告 Arduinoのブートローダーをコンパイル久しぶりにArduino互換ボードを作り、ブートローダーを書き込んでArduino IDEからプログラムを書き込もうとしたら avrdude: stk500_recv(): programmer is not responding というエラーが出て書き込めない。 ためしに以前作ったボード(動いていたボード)で試したが、今度は avrdude: stk500_getsync( ): not in sync: resp=xxxx というエラーが出てやはり書き込めない。 その以前作ったボードに再度ブートローダーを書き込んだら avrdude: stk500_recv(): programmer is not responding と新しいボードと同じエラーがでた。この辺でどうもハードの問題っぽくないかもと考えた。 もしかするとArduinoのバージョンが変わったためにうまくいかないのかと思い、再度ブートローダーをコンパイルした。ブートローダーのコンパイルに関しては、ここにまとめている ところが新しくコンパイルしたブートローダーを書き込もうとするとエラーが出て書き込めない。 以前はちゃんとコンパイルできて、ちゃんと書き込めたのに今はできなくなっている。 結局ブートローダーのコンパイルに関してはHow to: Compiling the Arduino Bootloaderに書いてある通り、ATmegaBOOT_168.cの584行目付近を #if defined(EEPE) while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete #else while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete #endif /* #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete #else while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete #endif */ と変える。これは「error: ‘EEWE’ undeclared」というエラーを出さないようにするため そしてMakefileの52行目付近で OPTIMIZE = -Os # OPTIMIZE = -O2 と変える。これは上述したコンパイル後のhexファイルが以前のものの2倍近くになっているという問題を解決してくれる。 で、このようにコンパイルしたブートローダーを書き込むとうまく行く。 しかし、相変わらず avrdude: stk500_recv(): programmer is not responding というエラーが出てArduino IDEからプログラムを書き込むことができない 以前うまく行ったときとの違いはArduinoのバージョンとかavrdude関連だと思う continue on: [Arduinoの問題]
広告 |