アカウント名:
パスワード:
制御機器のプログラムだと、物理メモリアクセスに対して常時パリティチェックをかけるような専用タスクが走らせるのはごく普通にありますよ。
あと、たとえば
if a==1 { // aが1のとき func_1();
} else if a!=1 { // aが1以外のとき func_2();
} else { // 正常ならここは通らないはず kick_NMI();}
などというコーディ
条件式がa==1とa!=1ならそんなことしませんよa!=1と書くこと自体がバグの元
switch文の場合、行くはずのないdefaultに行くバグはあるから、それとごっちゃになってませんか
どうしてもこう書きたいならaはvolatileにしないといけないはずですが
> #もちろん実際にはオプティマイズでコード削除されないようにしますが
何を言いたいのかわかりませんが、
aがvolatileだろうが、volatileでなかろうがそういう問題ではなく、a==1とa!=1が同時に成立する場合があり得るので、そういう場合には、> // 正常ならここは通らないはず> kick_NMI();を実行させる。
そんな事情わからないコンパイラが、勝手にオプティマイズで消す可能性があるので、>#もちろん実際にはオプティマイズでコード削除されないようにしますがってことでしょ。
>条件式がa==1とa!=1ならそんなことしませんよ>a!=1と書くこと自体がバグの元とか、
>どうしてもこう書きたいならaはvolatileにしないといけないはずですがとか、論外。ビットが安定していることが前提の世界の話ではない。
> a==1とa!=1が同時に成立する場合があり得る
同時はおかしいだろ。
ソースレベルだとそうだけど、バイナリレベルだとどちらかの「1」のビットが乱れればあり得る。
cmp a, #1beq label1bne label2仮に上のような例で両方の条件分岐が成立するとしても、同時に判定しないので先に判定したほうが優先されるだけ。
バイナリレベルだとコンパイラが2つ目の「1」を消していることがありうる。volatileを使わなければ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
普通にやりませんか? (スコア:1)
制御機器のプログラムだと、物理メモリアクセスに対して常時パリティチェックをかけるような専用タスクが走らせるのは
ごく普通にありますよ。
あと、たとえば
if a==1 {
// aが1のとき
func_1();
} else if a!=1 {
// aが1以外のとき
func_2();
} else {
// 正常ならここは通らないはず
kick_NMI();
}
などというコーディ
Re: (スコア:0)
条件式がa==1とa!=1ならそんなことしませんよ
a!=1と書くこと自体がバグの元
switch文の場合、行くはずのないdefaultに行くバグはあるから、それとごっちゃになってませんか
Re: (スコア:1)
どうしてもこう書きたいならaはvolatileにしないといけないはずですが
Re: (スコア:0)
> #もちろん実際にはオプティマイズでコード削除されないようにしますが
Re: (スコア:0)
何を言いたいのかわかりませんが、
aがvolatileだろうが、volatileでなかろうがそういう問題ではなく、
a==1とa!=1が同時に成立する場合があり得るので、
そういう場合には、
> // 正常ならここは通らないはず
> kick_NMI();
を実行させる。
そんな事情わからないコンパイラが、勝手にオプティマイズで消す可能性があるので、
>#もちろん実際にはオプティマイズでコード削除されないようにしますが
ってことでしょ。
>条件式がa==1とa!=1ならそんなことしませんよ
>a!=1と書くこと自体がバグの元
とか、
>どうしてもこう書きたいならaはvolatileにしないといけないはずですが
とか、論外。
ビットが安定していることが前提の世界の話ではない。
Re: (スコア:0)
> a==1とa!=1が同時に成立する場合があり得る
同時はおかしいだろ。
Re:普通にやりませんか? (スコア:0)
ソースレベルだとそうだけど、バイナリレベルだとどちらかの「1」のビットが乱れればあり得る。
Re: (スコア:0)
cmp a, #1
beq label1
bne label2
仮に上のような例で両方の条件分岐が成立するとしても、同時に判定しないので先に判定したほうが優先されるだけ。
Re: (スコア:0)
バイナリレベルだとコンパイラが2つ目の「1」を消していることがありうる。volatileを使わなければ。