Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/19:3/3
2024/05/18:20/24

2024/03/20より399/1409
人気モジュール
No.1: フォーラム 3
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット3

No.1:どっかの巡回ロボット2
No.2:Baidu巡回ロボット1

日曜日からの合計
メイン
   Link (MAC) Layer Protocol Implementation & Model Development
     NAV期間と通常状態の定期的遷移でのエラー
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ichiko
投稿日時: 2008/3/4 16:58
新米
登録日: 2008/3/4
居住地:
投稿: 17
NAV期間と通常状態の定期的遷移でのエラー
はじめまして、こんにちは。

QualNet4.0で一つの端末がNAV期間と通常状態を定期的に(10msごとに)遷移するコーディングをしているのですが、下記のようなエラーがでて、シミュレーションが途中(シミュレーション時間で20sほど)で止まってしまいます。それまでは正確に遷移しています。seedによってうまくいく時といかない時があります。

引用:
qualnet: ../kernel/src/sched_std_library.cpp:365: clocktype SCHED_STDLIB_NextEventTime(const PartitionData*): Assertion `toVal >= partitionData->theCurrentTime' failed.アポートしました


linuxなのですが/kernel/src/sched_std_library.cppを探してもkernelの中にはC++ファイルがないのでどういうエラーが起こっているのかわからなくて困っています。

コーディング内容は簡単に言いますとmac_dot11.cppのMacDot11LayerのeventtypeにNAV期間に入るイベントとNAV期間が終わり通常状態に戻るイベントを加えて、これらのイベントを10ms毎に行き来するというものです。

シナリオはAPに一つの端末しかない状況でCBRで送信しています。

エラーの原因などご教授いただければと思い投稿させて頂きました。よろしくお願いします。
hed
投稿日時: 2008/3/4 17:37
一人前
登録日: 2006/7/3
居住地: 京都
投稿: 81
Re: NAV期間と通常状態の定期的遷移でのエラー
ichikoさんこんにちは。

sched_std_library.cppは公開されておらずオブジェクトファイルしかないようなので、SCHED_STDLIB_NextEventTime関数の詳細はわかりません。
以下はエラー内容を見て想像で書きます。

引用:

qualnet: ../kernel/src/sched_std_library.cpp:365: clocktype SCHED_STDLIB_NextEventTime(const PartitionData*): Assertion `toVal >= partitionData->theCurrentTime' failed.アポートしました

このエラー内容は、"toVal" は "partitionData->theCurrentTime"以上のはずだが、そうでなかったということを言っていると思います。
関数名から想像すると "toVal" は次のイベントの開始時刻ではないかと思います。
そうすると、このエラーが起きた原因は、現在時刻より過去にイベントを仕掛けようとしたために起きたエラーではないでしょうか?

マルチスレッドで動いているとpartitionData(スレッド)毎にtheCurrentTimeが同期されていないタイミングがあると思います。
この辺が原因ではないでしょうか?

想像ばかりで申し訳ありませんが、何かのお役にたてれば幸いです。
ichiko
投稿日時: 2008/3/4 22:49
新米
登録日: 2008/3/4
居住地:
投稿: 17
Re: NAV期間と通常状態の定期的遷移でのエラー
hedさん貴重なご意見ありがとうございます。

引用:
関数名から想像すると "toVal" は次のイベントの開始時刻ではないかと思います。そうすると、このエラーが起きた原因は、現在時刻より過去にイベントを仕掛けようとしたために起きたエラーではないでしょうか?

マルチスレッドで動いているとpartitionData(スレッド)毎にtheCurrentTimeが同期されていないタイミングがあると思います。
この辺が原因ではないでしょうか?

確かにpartitionData毎にtheCurrentTimeが同期されていないタイミングがあるかもしれません。
mac_dot11.cppのMacDot11LayerのMSG_MAC_TimerExpiredというイベントからmessageから取り出したtimerSequenceNumberとdot11->timerSequenceNumberが同じ時のみMacDot11HandleTimeout関数に進むことがわかります。

私の作ったイベント内でこのmessageから取り出したtimerSequenceNumberとdot11->timerSequenceNumberをprintf出力させた場合、全く異なっています。たまに同じ数字の時があるのですが…

timerSequenceNumberが一致していないことが同期していないことと関係がありそうなのですが、timerSequenceNumberが一致しない原因は主にどんなことが考えられるでしょうか?

もしよろしければご教授お願いします。

hed
投稿日時: 2008/3/5 10:35
一人前
登録日: 2006/7/3
居住地: 京都
投稿: 81
Re: NAV期間と通常状態の定期的遷移でのエラー
引用:

私の作ったイベント内でこのmessageから取り出したtimerSequenceNumberとdot11->timerSequenceNumberをprintf出力させた場合、全く異なっています。たまに同じ数字の時があるのですが…

これは、MSG_MAC_TimerExpiredイベントのときと同様に、以下が成り立つときだけ、自作のタイマーハンドラーを呼ぶということですよね。

timerSequenceNumber == dot11->timerSequenceNumber


詳細は特に調べていないのですが、一致しない原因としてぱっと思いついたのは、dot11->timerSequenceNumberのインクリメントのし忘れの可能性はないかなと思いました。
もし自作のメッセージを作成しているのであればこのあたりも疑ってみるといいかもしれません。
ためしにdot11->timerSequenceNumberをインクリメントしている箇所を機械的に検索してみたら以下が見つかりました。

$QUALNET_HOME\libraries\wireless\src\mac_dot11-mgmt.h(709):    dot11->timerSequenceNumber++;
$QUALNET_HOME\libraries\wireless\src\mac_dot11-sta.h(1359):    dot11->timerSequenceNumber++;
$QUALNET_HOME\libraries\wireless\src\mac_dot11-sta.h(1392):    dot11->timerSequenceNumber++;
$QUALNET_HOME\libraries\wireless\src\mac_dot11-sta.h(1423):    dot11->timerSequenceNumber++;

ここでやっていることを参考にしてはいかがでしょうか?
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT