はじめまして。
位相カウンタの16bit以上への拡張方法ですが、
以下の方法ではどうでしょう?
volatile signed long TCNT32; // 32bits拡張カウンタ
signed long refreshTCNT32()
{
static unsigned short TCNTold; // 前回のTCNT値を記憶。
unsigned short TCNTnew;
// disable_interrupt(); // 割り込み禁止
TCNTnew = TCNT;
signed short diff = TCNTnew - TCNTold; // 前回値と今回値の差を取得
TCNTold = TCNTnew;
TCNT32 += diff; // カウンタ値を更新
// enable_interrupt(); // 割り込み許可
return TCNT32;
}
上記のrefreshTCNT32()をTCNTが最大でも32767を超えない周期で呼ぶ。
(ex.1mSインターバル割り込み等)
普段の参照はTCNT32値を使用すれば、
>割り込みが起こり、この処理が行われる前に、
>もう一度、オーバーフロー/アンダーフローが、
>起きている可能性があるのです。
の問題にも引っかかりません。
・・・と思うんですけどどうでしょう?
土屋