単なるTipsです。
Natural Tiny Shell(NT-Shell)をArduinoに移植してみたの記事ではシリアルポートを常時使っています。
開発中、ときどきスケッチが書き込めなくなることがありました。
スケッチの書き込みもシリアルポート経由なので、スケッチの動作がおかしいと書き込みモードに切り替わらない場合があるようです。
Arduboyはハードリセットボタンがありますが、Arduboyのライブラリにも対策がされています。
それは、「電源オンのときにUPボタンとLEFTボタンを押しているとセーフモードになる」というものです。
セーフモードでは、ユーザのスケッチは実行されません。
そのため、スケッチ書き込みの邪魔をするようなコードがArduboyに書き込まれてしまっていても、それを回避することができます。
これはライブラリのコードを見ていたら偶然見つけました。
Arduboy-1.1.1/src/core/core.hに以下のような記載があります。
/// Safe mode /** * Safe Mode is engaged by holding down both the LEFT button and UP button * when plugging the device into USB. It puts your device into a tight * loop and allows it to be reprogrammed even if you have uploaded a very * broken sketch that interferes with the normal USB triggered auto-reboot * functionality of the device. * * This is most useful on Devkits because they lack a built-in reset * button. */ void static inline safeMode() __attribute__((always_inline));
safeMode() の中身はcore.cppにありますが、何もしない命令(nop)の無限ループです。
これでもだめだったら、ハードウェアリセットという手段があります。
コメント
今は必ず保険で起動時に5秒間のdelayをかましてる
私も自前でセーフモードを実装していました。