[Suzaku:01666] Re: Linuxフリーズ時の調査方法について
yasuo kominami(gmail)
email@hidden
2009年 10月 28日 (水) 20:25:03 JST
菊地様
皆様
こちらには初めて投稿します。
小南と申します。
以下のコードは、コンパイルが可能なソースコードからコピー
アンドペーストされたものでしょうか。
そうであるならば、明らかにおかしい点があります。
一番外側のfor文で0に初期化している変数と、それ以外で
使われている変数が異なっています。
0に初期化しているのは変数"llpnct"であり、それ以外では
変数"lpcnt"が使われています。
> for(llpcnt=0; lpcnt<18; lpcnt++){
コンパイル可能であるならば、変数"lpcnt"は、このfor文
に来るまでに何らかの値が設定されているか、未初期化
のままではないかと思います。
また可能性だけでいうと、2番目のforループも、もし
変数"mscntの型がchar型(符号付き、符号なしのどちら
でも)ならば、判定条件がchar型であらわされる範囲
も大きい値と比較することになるため、常に真になり、
無限ループになります。
変数の型の宣言の部分も含めたコードを示してもら
えませんか。
2009/10/28 菊地 義和 <email@hidden>:
> yashi さま
>
> 菊地です。御世話になります。
>
> 確認してみました。
>
> コードは次のようにしました。
> for(llpcnt=0; lpcnt<18; lpcnt++){
> for( mscnt=0; mscnt<(18*9+1)*5; mscnt++ ) { ←ここが
> tmp = ioread32( adr ); ←問題の
> if( tmp == 0){ ←箇所
> break; ←です。
> } ←
> udelay(192); ←この時間に注意
> } ←
> {
> tmpとlpcntの関係による条件分析と表示
> (if文とprintk文による状態3バイト表示)
> }
> 条件ごとの実施したい処理
> }
>
> 上記「←ここが」のfor文から抜けないように見えます。
>
> コードイメージに「この時間に注意」と書きましたが
> その設定時間が短いと停止してしまうように感じました。
>
> 「ioread32( adr )」は余り短い間隔で呼び出すことは
> よくないのでしょうか。
>
> アドバイス宜しくお願いします。
>
> 以上
>
suzaku メーリングリストの案内