あれの開発記 22ページ目 [ColdFire V1]
※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。
今までの結果は多分、「シリアルコンソールから操作したからこうなった」と言う事ではなく、基本的にプロトコルスタック自体が持っている問題に思えます。
Interface誌の手順で行うと、
1.PCからtelnetでネットワークボードに接続する
2.telnetで接続したPC向けにmainを実行させる
となり、telnetで接続した時点でARP交換が行われ、ARPテーブルの更新が完了している為に、シリアルコンソールで起きたような問題が出なかっただけだと思います。
多分以下の構成で行った時は、同様の問題が発生するのではないでしょうか。
1.telnetで接続するPCと、UDPの結果を見る別のPCを用意する
2.操作側PCからtelnetでネットワークボードに接続する
3.結果を見る方のPC向けにmainを実行させる
そこで、Mainを以下の様に作り変えました。
※戻り値が0の時の条件式が、時には無限ループに陥る危険があるので、本当はここにもリミッターを入れるべきでしょう。
※まあしかし、エラー等を返す戻り値は常にチェックを入れる事が必要なんだと、あらためて思いましたよ。
フリスクメンバーのログインが必要です。
今までの結果は多分、「シリアルコンソールから操作したからこうなった」と言う事ではなく、基本的にプロトコルスタック自体が持っている問題に思えます。
Interface誌の手順で行うと、
1.PCからtelnetでネットワークボードに接続する
2.telnetで接続したPC向けにmainを実行させる
となり、telnetで接続した時点でARP交換が行われ、ARPテーブルの更新が完了している為に、シリアルコンソールで起きたような問題が出なかっただけだと思います。
多分以下の構成で行った時は、同様の問題が発生するのではないでしょうか。
1.telnetで接続するPCと、UDPの結果を見る別のPCを用意する
2.操作側PCからtelnetでネットワークボードに接続する
3.結果を見る方のPC向けにmainを実行させる
そこで、Mainを以下の様に作り変えました。
main( char *s ) { char *d,soc = CreateSocket( 0 ); long ip = GetIP( s ); int n,r; d = MemoryAlloc( 6 ); for( n = 0; n < 10000; n++ ) { GetDigit( n, d ); if( (r = SendTo( soc, ip, 30049, d, StrLen( d ) )) == 0 ) { n--; continue; } else if( r < 0 ) { PrHex( r ); break; } else ; } CloseSocket( soc ); MemoryFree( d ); }
※戻り値が0の時の条件式が、時には無限ループに陥る危険があるので、本当はここにもリミッターを入れるべきでしょう。
※まあしかし、エラー等を返す戻り値は常にチェックを入れる事が必要なんだと、あらためて思いましたよ。
Interface (インターフェース) 2008年 10月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/08/25
- メディア: 雑誌
Interface (インターフェース) 2008年 09月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/07/25
- メディア: 雑誌
2008-08-31 18:11
nice!(0)
コメント(0)
トラックバック(0)
コメント 0