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

Tatsuya SHIMIZU shimizu_t @ totani.co.jp
2009年 6月 5日 (金) 17:55:24 JST


高橋様

再度,アドバイス頂き,ありがとうございます。

> 同期しながら処理するなら、単純にグローバル変数でデータやり取り、セマフォ待ちで
> 通知でいいかと思います。

私も単純にグローバル変数を排他制御しておいて毎周期確認する方法が簡単化と思いますが,各タスクの結合をできるだけ疎にするためにメールボックスを使うといった内容が書いてある本を読みましたので本に従ってみました。

どうもありがとうございました。

清水


----- Original Message ----- 
From: "高橋和浩" <takahashi_kazuhiro @ nifty.com>
To: <users @ toppers.jp>
Sent: Friday, June 05, 2009 4:30 PM
Subject: (toppers-users 2962) Re: メールボックスに使用するメッセージのメモリ確保について


> こんにちは 高橋です
>>
>> 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/
>
>
>
>