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

M.Sugiyama sugiyama @ ap.chugoku-pc.ac.jp
2008年 8月 7日 (木) 14:21:17 JST


みさなん 

 お世話になります。
もろもろ実験中ですが、途中経過のみ。。

プライオリティは、もともとの物には手を加えていません。
従って、5,9、10のままです。

パケットの受け取りの順序を確認すべく、少々ソースに手を
加えてみました。

実行結果はのようになり、最後のパケットを2つのタスクが
受信しているようです。
act_tsk(TASK1),act_task(TASK2)の順序には依存いしてないようです。

言い忘れておりましたがAkiH8 3069F JSP-1.4.3での様子です。

取り急ぎご報告まで。。

start
waiting
waiting
message 2
thie is test message from task
  0

<中略>
message 2
thie is test message from task
  9
message 1
thie is test message from task
  9

=========Cソースファイル========
#include <t_services.h>
#include "kernel_id.h"
#include "sample1.h"
/*
        メール送受信用のバッファ
*/
typedef struct
{
        T_MSG pk_msg;
        char buf[64];
        INT  n;
}MESSAGE;

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

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

    syslog(LOG_NOTICE,"start");
    slp_tsk();
}
/*
        送信タスク
*/
void send_task(VP_INT exinf){
        MESSAGE msg;    //送信パケット
        INT i;

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

/*
        受信タスク
        タスクは2つ生成している
*/
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  %d",msg->buf,msg->n);
        }
}

==========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});
#include "../../systask/timer.cfg"
#include "../../systask/serial.cfg"
#include "../../systask/logtask.cfg"

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