GCCでAVR

加速度計を製作中USIを使ったソフトウェアUARTをアセンブラで描いてたら頭が痛くなったので唐突にWinAVR(GCC)導入。
…なんで今までこれ使わなかったんだって言うぐらいの便利さで凹む。


とりあえず覚書

  • SLEEP関連がエミュレートデバッガで微妙
  • 割り込み関係も微妙
  • USIがシフトしないのは何故?


ついでに以前書いた起動シーケンスのバグも発見。

SLEEP→INT0割り込み→割り込みルーチン→ルーチンの最後で再びSLEEPを呼び出す

と言う処理をしていたけど、これだとスタックポインタがPOPされないので割り込みがかかるたびにスタックポインタがどんどん進んで、最終的に破綻してしまう。

永久ループの中でSLEEP+割り込みの中ではRETI

が正解。