澤口@一升金です。 Kosaka Toshifumiさんの<4.3.2-J.20030526212136.00c7a2b8@xxxxxxxxxxxxxxxxxxxxxx>から >3048用に書いたものですが,割り込みを用いて送受信するものです。 さすがにお手本にしたくなるようなきれいなソースですねぇ。 でも、バッファにデータが無いとき、ch=-1、すなわち 0xffff を返すのは バイナリ受信のときにちょっとつらいのでは。 (Tips) 昔習った小技なのですが、リングバッファのポインタ計算で、2^n バイトの バッファサイズの時はバッファをしかるべきデータアラインに配置して、 バッファの先頭アドレスが例えば 0x8000 だったら、 (unsigned int)++bufptr &= 0x807f (128バイトバッファの場合) で済ませてしまう、というのがあります。 元のソースに応用すれば receiveptr_in++; if (receiveptr_in==RECEIVERINGBUFFSIZE) receiveptr_in=0; は ++receiveptr_in &= RECEIVERINGBUFFSIZE; (ただし、RECEIVERINGBUFFSIZE は 2^n乗であること) となります。もっとも、この場合のアクセスでは配列要素のアドレス計算 がコンパイラによって生成されるので、目に見えて速くはならないと思い ますが。