(toppers-users 2962) Re: メールボックスに使用するメッセージのメモリ確保について

高橋和浩 takahashi_kazuhiro @ nifty.com
2009年 6月 5日 (金) 16:30:08 JST


こんにちは 高橋です
> 
> 1点だけ確認させて頂けると嬉しいのですが,送信時に同じ変数を使用できないということですが,
> 
> 「送信して受信されるまで書き換えてはいけないが,受信側のタスクと同期を取る(具体的には送信時にスリープして,受信側のタスクが受信完了後に送信側のタスクを起こす)場合には問題ないということでしょうか?」
> 
そうです。そういうケースがあるようです。
これはたまたま動作すると考えてください。これはタスクの優先度にも関係します。
動くケースは、task2のほうが優先度が高いか同じで、task1よりも先に起動されている場合ですね。
その場合には、rcv_mbxが必ずブロックされてから、task1のsnd_mbx()によって起こされます。
その場合にカーネル内でリンクリストを操作しません。(これは実装に依存します。他のITRONは
違う動作をするかもしれません)

たぶん現状は、task1の優先度がtask2より高いのだと思います。
そうした場合に、wup_tsk()実行時にtask1がディスパッチされ、先にsnd_mbxが起こります。
先にsnd_mbxがコールされるとリンクリストの処理になるためです。
ですが、task1の起動が疎である場合は、task1が起動されない間にtask2が待ち状態となるため
うまくいくのだと思います。

それから、設計方法として、メールボックスで同期して操作するのは面倒が多いですね。
同期しながら処理するなら、単純にグローバル変数でデータやり取り、セマフォ待ちで
通知でいいかと思います。
-- 
アライブビジョンソフトウエア株式会社
高橋和浩
673-0031兵庫県明石市小久保2-2-7幹線ビル4F
Email:takahashi_kazuhiro @ nifty.com
http://homepage3.nifty.com/ALVS/