(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 ================================