フォーラム: ヘルプ (スレッド #1103)

メールボックスについて教えてください。 (2002-09-17 23:43 by tsubo #2000)

濱さんのコメントによりHOSのサポート掲示板から引っ越してきました。
石坪と言います。ソフトもRTOSも初心者です。
HOS-H8を使えるように勉強しています。初心者のため分からないことがたくさんあります。すいませんが、教えていただけないでしょうか。

 HOSのサポート掲示板の93を参考にして、メイルボックスを動かしてみました。しかし、メッセージが受け取れません。テストプログラムを掲載するので何が悪いか教えてください。

 下記のプログラムを動かした時、a,b,oはモニター画面に表示されます。
 /* タスク1 */
void Task1(INT stcd)
{
int c;
char snddata[] = "ishitsubo";
char *data;

data = &snddata[0];
SCI_Puts("\rTask1 Start.\r");
SCI_Putc(0x0d);
SCI_Putc(0x0a);
for ( ; ; ) {
wai_sem(SID_SCI);
SCI_Putc('b');
sig_sem(SID_SCI);
dly_tsk(1000);
if(P2DR == 1){
snd_msg(MID_SMP1, (T_MSG)snddata);
}
}
}


/* タスク2 */
void Task2(INT stcd)
{
char *rcvdata;
SCI_Puts("\rTask2 Start.\r");
SCI_Putc(0x0d);
SCI_Putc(0x0a);

for( ; ;){
wai_sem(SID_SCI);
SCI_Putc('a');
sig_sem(SID_SCI);
if(E_OK == rcv_msg( (T_MSG*)rcvdata, MID_SMP1)){
wai_sem(SID_SCI);
SCI_Putc('O');
sig_sem(SID_SCI);
}
wai_sem(SID_SCI);
SCI_Putc(*rcvdata);
sig_sem(SID_SCI);
}

ext_tsk();
}

メッセージ #2000 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: メールボックスについて教えてください。 (2002-09-18 00:19 by m-arai #2002)

私も勉強中の身ですが、気づいたところを指摘します。

まず、
char *rcvdata;

if(E_OK == rcv_msg( (T_MSG*)rcvdata, MID_SMP1)){
はおかしいです。

ER rcv_msg(T_MSG **ppk_msg, ID mbxid);
ppk_msg メッセージパケットへのポインタを格納する場所へのポインタ
mbxid メイルボックスID

なので、
if(E_OK == rcv_msg( (T_MSG **)&rcvdata, MID_SMP1)){
かと。
それと、受け取ったものの表示ですが、
SCI_Putc(*rcvdata);
だと先頭の一文字しか出ないような…
SCI_Puts( rcvdata);
かな。
#2000 への返信

メッセージ #2002 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: メールボックスについて教えてください。 (2002-09-18 02:46 by m-arai #2007)

ああ、HOS-V3では

ER rcv_msg(VP *pk_msg, ID mbxid);

でしたね。

if(E_OK == rcv_msg( (VP *)&rcvdata, MID_SMP1)){

VPはvoid *ですから、つまり言っていることは同じです。
rcv_msgの第一パラメータは、メッセージへのポインタ
を格納するポインタ変数のアドレス(=ポインタ)なのです。
#2002 への返信

メッセージ #2007 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: メールボックスについて教えてください。 (2002-09-18 03:01 by m-arai #2009)

コンパイラの警告で問題のありかが分からないだろう
か?と思っていたら、mailbox.hで

typedef VP T_MSG; /* ヘッダは利用しない */

となってますね。これが混乱の原因?
#2007 への返信

メッセージ #2009 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: メールボックスについて教えてください。 (2002-09-18 23:10 by 匿名 #2037)

ARAI Mikio さんありがとう御座いました。的確なアドバイスにより一文字表示できました。大変感謝しています。
#2000 への返信

メッセージ #2037 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: メールボックスについて教えてください。 (2002-09-19 21:20 by m-arai #2070)

T_MSGの定義に問題があったのが、より解決を困難にしていたようで
す。この点は近々改善されるでしょう。

#と、これは個人的な話なのですが、私はフォーラムの「モニター」
#設定で全ての投稿を自分宛にメールで転送するようにしています。
#半角カナを使われると、それ以降内容が化けて読めません。
#なので、出来たら全角カナを使っていただけるとありがたいです。
#2037 への返信

メッセージ #2070 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする