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桁だけだったが。

long型ってのは知らんなぁ。
unsigned intとか使ってたような違うような。
2010-07-23 Fri 03:52 | URL | 詠人不知 [ 編集]
そっちも使ってたのかw
まぁあまり複数桁使わないよね……。

>long
floatに対するdoubleみたいなものじゃないかなぁ。
利用するビット数が違う。

unsignedは最上位ビットを負かどうかの判定に使うんじゃなくて他のビットと同じように利用して、使える数値の範囲を0以上に固定して絶対値でみたときに使える数を大きくするもののはず。
2010-07-24 Sat 22:53 | URL | アペルジオ [ 編集]
>long
言われてみれば習った気もする。

>unsigned
把握(´∀`)
2010-07-25 Sun 20:50 | URL | 詠人不知 [ 編集]

コメントの投稿















コメント非公開の場合はチェック

この記事のトラックバック

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