[H8-ML(3296)] Re:割込みによるシリアル通信について
From: Sawaguchi Yuji <issho21@xxxxxxxxxx>
Date: 2003年05月27日(火)00時00分40秒
澤口@一升金です。

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乗であること)
となります。もっとも、この場合のアクセスでは配列要素のアドレス計算
がコンパイラによって生成されるので、目に見えて速くはならないと思い
ますが。
スレッド概略
[3288(R)](起点)
 └[3294(U)]
   └[表示中]
     ├[3306(1)]
     └[3312(2)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]