Effective μITRON 第65539項 メッセージの優先度が必要なければmbxでなくdtqを使おう

μITRONの通信APIには、見るからにそっくりなAPIのセットがある。データキュー(dtq)とメールボックス(mbx)だ。
どちらも、cre_xxx、del_xxx、[t]snd_xxx、[tp]rcv_xxxがあり、できることは、大変同じように見える。


さて、これらの違いはご存知だろうか?
http://www.sakamura-lab.org/TRON/ITRON/ITRON-CLUB/ARCHIVE/msg00098.html
ぐぐったらすぐに出てきたが。


つまり、こういうことだ。メールボックスは、(おそらく)内部では、リンクトリストのようなものとして、管理される。それに対して、データキューは、本当にキュー、つまりただの配列データ(+先頭ポインタ、終端ポインタ+同期オブジェクト)として管理される、というわけだ。


それぞれ、メールボックスと、データキューの利点は以下のようになる

mbx:

  • 優先度を付けられる(後から送ったメッセージを先に取り出すことができる)
  • 最大数を決めなくてよい


dtq:

  • (多分)mbxに比べると軽い
  • ただのデータを送れる(mbxはパケットを作ってやらないといけない)


さて、こうやって見ると、mbxの利点は、大抵の状況でどうでもよい、ということがわかるだろう。優先度付きメッセージなんて、そうとう注意深く設計しないと、どこで同期問題に出会うかわからなくなりそうだし、最大数っつったって、そんな、ねえ、mitron使うような環境で、ヒープ確保なんて怖くて使えないし…
それに比べると、dtqの良いところは大体の状況で役立つといえるだろう。なによりも、ワード単位整数なら、気軽にそのまま送れるというのが大きい。(そういえば、会社の人はメッセージパケットなんとかするラッパ書いてたナァ…昔のバージョンには無かったとかかもしれんが)


と、いうわけで、よほどのことが無い限り、メールボックスより、データキューを使うようにするとよいかと思われます、という話。