アカウント名:
パスワード:
制御機器のプログラムだと、物理メモリアクセスに対して常時パリティチェックをかけるような専用タスクが走らせるのはごく普通にありますよ。
あと、たとえば
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を使わなければ。
> aがvolatileだろうが、volatileでなかろうがそういう問題ではなく、> a==1とa!=1が同時に成立する場合があり得るので、
RAMが化けるという話であれば、RAMをそのつど読むか一度読んだ値を使いまわすかは重要な話では?
CPUのレジスタの値が信用できないとなると、ハードの設計ミスですよねえ
この人はいったいvolatileをどう理解しているんだろう…
メモリやレジスタに対して起きるソフトエラーを扱ってるとすると、破れるのは評価の間の値の不変性なので、その様な仮定をコンパイラに課さない方法はまさにvolatileです。
そもそも"同時"の意味が分かりません。
>a==1とa!=1が同時に成立する場合があり得る
同時に成立したら func_1() が呼ばれるから、「どちらも成立しない場合があり得る」じゃないかい?
より多くのコメントがこの議論にあるかもしれませんが、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)
オプティマイズの問題だと思っているところが、問題なんです
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)
量子コンピューターでもお使いなのでは。
Re: (スコア:0)
cmp a, #1
beq label1
bne label2
仮に上のような例で両方の条件分岐が成立するとしても、同時に判定しないので先に判定したほうが優先されるだけ。
Re: (スコア:0)
バイナリレベルだとコンパイラが2つ目の「1」を消していることがありうる。volatileを使わなければ。
Re: (スコア:0)
> aがvolatileだろうが、volatileでなかろうがそういう問題ではなく、
> a==1とa!=1が同時に成立する場合があり得るので、
RAMが化けるという話であれば、RAMをそのつど読むか一度読んだ値を使いまわすかは重要な話では?
Re: (スコア:0)
CPUのレジスタの値が信用できないとなると、ハードの設計ミスですよねえ
Re: (スコア:0)
この人はいったいvolatileをどう理解しているんだろう…
Re: (スコア:0)
メモリやレジスタに対して起きるソフトエラーを扱ってるとすると、破れるのは評価の間の値の不変性なので、その様な仮定をコンパイラに課さない方法はまさにvolatileです。
そもそも"同時"の意味が分かりません。
Re: (スコア:0)
>a==1とa!=1が同時に成立する場合があり得る
同時に成立したら func_1() が呼ばれるから、
「どちらも成立しない場合があり得る」じゃないかい?