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

takaya_kakizaki @ gmx.yamaha.com takaya_kakizaki @ gmx.yamaha.com
2008年 8月 7日 (木) 15:43:52 JST


杉山さま、宿口さま

柿崎です。

この課題の趣旨とは離れますが、
例のバグの回避法として宿口さんの例をださなかったのは

「タスク間通信にスタック領域を使うのは危険な香りがする」からです。

したがって、こういう場合は定石として固定長メモリプールを使った例を
覚えておいたほうがよいと思います。

----- 以下、想定される危険予知(例) -----
1) 以下のコードをFI4に移植しました。
2) 送信タスクをdel_tskしました(スタック開放)
3) メールボックスがうまく動きません
4) 泥沼デバッグ…

(どちらかというとSWESTネタですね。)

------------------------
柿崎 貴也
ヤマハ株式会社 INFOサウンド開発推進室
E-mail: takaya_kakizaki @ gmx.yamaha.com




SHUKUGUCHI Masahiro <mshukuguchi @ elec.nara-k.ac.jp> 
2008/08/07 15:10
users @ toppers.jp へ
返信してください


宛先
users @ toppers.jp
cc

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







Shukuguchi

PS
> 普通は、恥の書きついでに以下のようにすればよいのでしょうか??

いくつかのやり方があります。固定長メモリプールを使用するのも手だと
思いますが、手っ取り早くやるなら

/*
        送信タスク
*/
void send_task(VP_INT exinf){
                 MESSAGE msg_bdy[10];
        MESSAGE *msg;   //送信パケット
        VP              p_blk;  //送信用固定メモリプール
        INT i;

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

ですかね(あくまでテストプロとして)

固定長メモリプールを使用する場合は、提示されたコードでよいと思います。