[H8-ML(4247)] これはどちらのバグというベキか?
From: Kazutaka "Zak" Sawa <CXJ03106@xxxxxxxxx>
Date: 2003年12月20日(土)23時21分31秒
どもども、神戸の澤です。

ようやく、秋月時代のコードがgccの上で動作し始めました。が、一つだけど
うにも引っかかる事があります。

結局最後に残った問題は、以下のソースのコンパイル結果でした。

        for (; gDMem.SendLength != 0; )
            ;

ここで、gDMemはグローバル変数でありしかも数十バイトもある構造体です。
つまり基本的に確実にメモリ上に割り付けられる存在です。これをこのままコ
ンパイルすると、こんなコードになってしまってました。

     946:   mov.l   @0xf7a0:32,er0

0000094e <.L108>:
     94e:   mov.l   er0,er0
     950:   bne .-4 (94e)

もう、まったくもってダメダメです。これでは永遠にこのループから脱出でき
ません。

で、このSendLengthというメンバー変数にvolatileを付けたところ、以下のよ
うなコードを吐きました。

00000946 <.L108>:
     946:   mov.l   @0xf7a0:32,er2
     94e:   bne .-10 (946)

もちろん、これが正解です。しかし、volatileを付けないとあんなコードにな
ってしまうのって正しいんでしょうかねぇ。うーーむ......


-- 

##                             from Kazutaka 'Zak' Sawa (ZakLab)  ##
##                           e-Mail: mailto:zak.k.sawa@xxxxxxxxx  ##
##                           http://homepage1.nifty.com/~zaklab/  ##
##                                                                ##
## すべてのメールはバカ者によって盗聴されている可能性があります ##
スレッド概略
[表示中](起点)
 ├[4248(1)]
 └[4252(2)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]