(toppers-users 2783) Re: メールボックスの機能について
TAKADA Hiroaki
hiro @ ertl.jp
2008年 8月 7日 (木) 12:39:52 JST
杉山様
名古屋大学の高田です。
> メールボックスを使った以下のソースを実行した結果がどうにも
> 腑に落ちません。
> どなたか、正しい説明を御願いできませんか??
>
> 以下のソースを実行しました。受信タスクの2つはプライオリティ
> を代えています。
>
> たぶん、この記述だと、受信タスクは優先度の高いタスクだけが
> 受信するはずなのですが、送信データの個数にかかわらず、最後の
> 1パケットだけを優先度の低いタスクが受け取ってしまいます。。
メールボックスが TA_TFIFO 属性になっていますので、優先度の低い方のタス
クもメッセージを受け取ります。TA_TPRI 属性にすれば、優先度の高い方のタ
スクだけがメッセージを受け取るようになるはずです。
最後の1パケットを優先度の低いタスクが受け取っているのではなく、最初の
メッセージを優先度の低いタスクが受け取っており、syslogに出力されるのが
最後になっているものと思われます。
動きを時間順に示すと次のようになります。
(1) main_taskが起動
(2) act_tsk(TASK1)で優先度の低いタスクが起動。そちらに切り替わる
(3) 優先度の低いタスクが、メールボックス受信待ちになる。main_taskに戻る
(4) act_tsk(TASK2)で優先度の高いタスクが起動。そちらに切り替わる
(5) 優先度の高いタスクが、メールボックス受信待ちになる。main_taskに戻る
(6) act_tsk(TASK3)で送信タスクが起動。そちらに切り替わる
(7) 送信タスクが最初に送信したメッセージは、最初にメールボックス待ちに
なった優先度の低いタスクが受信する(TA_TFIFO属性なので)。優先度の
低いタスクに切り替わらない。
(8) 送信タスクが2番目に送信したメッセージは、優先度の高いタスクが受信
する。
あとは、予想いただけると思います。
なお、send_taskは10個のメッセージで msg を共通に使っていますが、これは、
推奨される使い方ではありません(このケースは、大丈夫ですが、少し修正す
ると不具合が出ると思われます)。msg を10個分確保した方がいいと思います。
高田広章
名古屋大学