- 締切済み
シーケンサープログラム
ビットデバイスM0~M100があって、隣り合うMのデバイスが同時にONした時間をタイマー等でカウントし、一定時間以上その状態が続くと警報出力したいです。 力づくでプログラムの作成はできると思うのですが、何か短いプログラムで記述する方法はないでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ninoue
- ベストアンサー率52% (1288/2437)
隣り合うビット同士が両方とも1の場合には... if ((a & (a>>>1))!=0) ... integerとしての演算に許されているビット数-1 だけ同時にチェック可能です。 さらに多くのビットがある場合、シフトのためにチェック出来なかったビット分をオーバーラップさせながらチェックしていきます。 以上を基本にループさせる等の他ないと思います。 上記シフトには logical shift を仮定しています。 arithmetic shiftしかない場合 MSBはsign extendされるので注意 if ((a & (a>>1)&0x7fff)!=0) do ... 等とする。 (left shiftの方が使いやすいかもしれない) 連続する3bit checkの場合は次のようになる。 if ((a & (a>>>1) & (a>>>2)) != 0) do ...
- ur2c
- ベストアンサー率63% (264/416)
それならソフトウェア開発手法、特に言語をうまく選ぶくらいだと思います。良く聞くのは functional programming を使うと楽だ、という話です。たとえば ATM ならこんな報告 http://www.erlang.se/publications/Ulf_Wiger.pdf とか。
- ur2c
- ベストアンサー率63% (264/416)
何のために「短いプログラム」にしたいのでしょう? 書くのがめんどうなので libray call 一発で済ませたいのですか? つまり source code が短ければ良いのでしょうか? それとも、非力な石を使うので object code を小さくしたいのでしょうか?
補足
システムが膨大でデバイスの割付もいっぱいいっぱいであるためです。実際にはM500~M1000なんですが、質問では便宜的にM0~100としました
お礼
ありがとうございます。 参考になりました。これを元にトライしうまくいきました。