H8/2378で、queがずれる現象に悩んでいます。複数の割込レベルからcall quewrit(&qcb,evt)
quewrit(qcbp,evt)では、
   set_imask_ccr((_UBYTE)1); // 割込み禁止必要
   qcbp->bufp[qcbp->wpt] = evt;
   qcbp->cnt += 1;
   qcbp->wpt =(char)((qcbp->wpt+1)&qcbp->mask);
   set_imask_ccr((_UBYTE)0); // 割込み許可 07.11.14
とやってます。  取り出しはmainloopで、
   c = qcbp->bufp[rp];
   set_imask_ccr((_UBYTE)1); /* for ルネサスc */
   qcbp->cnt -= 1;
   set_imask_ccr((_UBYTE)0); /* for ルネサスc */
   qcbp->rp=(qcbp->rp+1)&mask; とやってます。
このrpとwpが、中身0のときたまにずれてるんです。