(toppers-users 2782) メールボックスの機能について

M.Sugiyama sugiyama @ ap.chugoku-pc.ac.jp
2008年 8月 7日 (木) 12:04:53 JST


メールボックスを使った以下のソースを実行した結果がどうにも
腑に落ちません。
どなたか、正しい説明を御願いできませんか??

以下のソースを実行しました。受信タスクの2つはプライオリティ
を代えています。

たぶん、この記述だと、受信タスクは優先度の高いタスクだけが
受信するはずなのですが、送信データの個数にかかわらず、最後の
1パケットだけを優先度の低いタスクが受け取ってしまいます。。

 何か、決定的な間違いがあるのでしょうか??
よろしく御願いします。


以下Cのソースファイル

typedef struct
{
        T_MSG pk_msg;
        char buf[64];
}MESSAGE;

/*
 *  メインタスク
 *  メールボックス機能を使ってデータを送信する
 */
void main_task(VP_INT exinf){

    	act_tsk(TASK1);
        act_tsk(TASK2);
        act_tsk(TASK3);

    slp_tsk();
}

void send_task(VP_INT exinf){
        MESSAGE msg;
        INT i;
        strcpy(msg.buf,"thie is test message from task\r\n");
        for(i=0;i<10;i++){
                snd_mbx(MAILBOX,(T_MSG*)&msg);
        }
}


void task(VP_INT exinf){
MESSAGE *msg;
        //受信処理
    syslog(LOG_NOTICE,"waiting");
        while(1){
    		rcv_mbx(MAILBOX,(T_MSG**)&msg);
    		syslog(LOG_NOTICE,"message %d",exinf);
    		syslog(LOG_NOTICE,"%s",msg->buf);
        }
}


CFGの記述
#define _MACRO_ONLY
#include "sample1.h"

INCLUDE("\"sample1.h\"");
CRE_TSK(MAIN_TASK, { TA_HLNG|TA_ACT, (VP_INT) 0, main_task, MAIN_PRIORITY,
                        STACK_SIZE, NULL });
CRE_TSK(TASK1, { TA_HLNG, (VP_INT) 1, task, MID_PRIORITY,
                        STACK_SIZE, NULL });
CRE_TSK(TASK2, { TA_HLNG, (VP_INT) 2, task, HIGH_PRIORITY,
                STACK_SIZE, NULL });
CRE_TSK(TASK3, { TA_HLNG, (VP_INT) 1, send_task, MID_PRIORITY,
                STACK_SIZE, NULL });
CRE_MBX(MAILBOX,{TA_TFIFO,HIGH_PRIORITY,NULL});

       ======================================================
      _|  __|
    _/_| _/_| E-mail:sugiyama @ ap.chugoku-pc.ac.jp 
   _/ _|_/ _| 中国能力開発大学校 生産情報システム技術科
  _/  __/  _| 杉山 誠
 _/        _|akoto.Sugiyama  ================================