たぶん、もっと格好のよいリングバッファ実装があるはず。。。
その思いが捨てられず、探していた。
Learn C The Hard Way
RingBuffer_write()を見ると、memcpy()しているのだが、引数のlengthをそのまま使っている。
バッファがあふれそうな気がするのだが。。。
マクロの中でmoduloを使っているけど、書込んだ後の話だし。
<string.h>をincludeしているから、memcpy()に秘密があるわけでも無さそうだし。。。
わからん。
check()で"Not enough space"とあるから、一度に書き込めるサイズは連続したスペースの分まで、ということだろうか。
循環バッファ - アルゴリズムとデータ構造 | ++C++; // 未確認飛行 C
こちらはmoduloを使っているが、サイズを2のべき乗にすることで速度の高速化を図っているとのこと。
そうか、nRF51 SDKのバッファサイズが2のべき乗しか許可しないのは、このしくみが使われていたのか。。。
Googleで5ページ分ほど調べたが、気になるのはこれくらいだった。
あとは、1データずつ詰めていくタイプだ。
そこそこがんばって作ってみたのだが、あまり速度に需要はないのかもね。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。