澤口@一升金です。
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乗であること)
となります。もっとも、この場合のアクセスでは配列要素のアドレス計算
がコンパイラによって生成されるので、目に見えて速くはならないと思い
ますが。