Encounter Knot 800

タイトルとかけ離れたモチベーションで華麗(※注 決して早い訳ではない)な更新頻度を発揮するかもしれない趣味的ブログ?

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |

オーバーフローその2?

2個下の後輩がPIC16F84Aで4桁の7セグLEDを動作させるシステムを構築していたが、動作試験として表示値を111ずつ増加させていくプログラムにおいて、
「222」までは正しく表示するが、それ以降値が狂うということだった。

「0000」→「0111」→「0222」→「0077」→「0188」→……

のようになっていた。

「0077」の時点でどう考えてもオーバーフローです的な雰囲気だったので、考えてみると
333-256=77なので、
どうも8ビットで引っかかっているようだった。

7セグLEDがラッチ機構を利用しているようで、その各桁のロックと解除及び値の入力を行わせる関数に渡す引数や内部で宣言している変数をint型からlong型に変更したら実行できたというお話。

ANSI準拠じゃないコンパイラだったからこのような弊害が出たようである。

マニュアルにint1,int8,int16の型が書いてあり、intはint8,longはint16型のようで、longに変えれば16ビットまで利用できたために成功したようだった。

コンパイラ:CCSコンパイラ(バージョン不明)

longだとメモリ使いすぎてるんですけどね
スポンサーサイト
プログラム的なもの | コメント:3 | トラックバック:0 |
| HOME |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。