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 |

fprintfのファイル出力タイミング

研究で解析プログラムを動かしていたのだが、10時間ほど(試験動作中で、いまだプログラムは完成せず)たったところでエラー落ちしてた。
どこまで計算できたのかと出力ファイルを開いたのに出力されていない。

fprintfは最低1回は通過していたが、数千回ループが回り終わってからfcloseしてたのでfcloseされないファイル出力はどうなっているのか調べてみた。

FILE *fp
for(int i = 0;i < 10;i++)
{
  fprintf("%d\n",i);
}
fclose(fp)
for(int i = 0;i < 10;i++)
{
  printf("%d\n",i);
}

上のプログラムを実行させ、ブレークポイントを設定して動作させてみた。
fprintfのところでとめた場合、出力ファイルはエクスプローラ上で0KBとなっており、中身がなかった。
printfのところだと中身が確認されたのでつまるところ、

fprintfはfcloseしないとエクスプローラ上のファイルに書き込まれてない

ということなのだと思う。

この行為に意味があるのかどうかは聞かないでください。
プログラム的なもの | コメント:2 | トラックバック:0 |

XPのSATAモードIDEからAHCIへ再インストールなしで変更

12月30日加筆訂正

windows7を導入するにあたって、SATAモードがIDE互換モードとなっていたのでNCQが使われていない設定だったのをAHCIに変更し、NCQを使えるように変えてみた。
しかし、このままではドライバを組み込んでいないXPが起動中にブルースクリーンで再起動をかけられてしまうので再インストールを検討していたが、ググったらあとからでもドライバをインストールしてうまいことやってやれば何とかなるようだったので、試してみた。以下に試行錯誤を示す。



                          注意!
 これはあくまで一例であり必ず成功するとは限りませんし、筆者自身も半分失敗状態になっているので実行される方は自己責任でお願いします。また、この記事にしたがって実行した際のいかなる損害も筆者はその責を負いません
(常連の人たちはこんなことしないだろうけど一応ね。)




SkyLocal.netさんを参考にマザーボードのメーカー(ASUSからM3A)から落としてきたAHCI用ドライバを取り出してinfファイルを書き換えてドライバの設定を……
と思ったら(IDEコントローラの)デバイスインスタンスIDの文字列がinfファイル中に存在しないではないか……。
ということその文字列を追加しドライバをインストール!
再起動してXP起動……。

失敗(ブルースクリーン落ち)

AHCIからIDEモードに変更して再度設定
infファイルを参考サイトさんと同じに設定
ドライバインストール!
再起動

また失敗

いったんあきらめてwin7起動してAHCIコントローラの設定を覗いてみたら、デバイスインスタンスIDの下8桁の16進数の部分が違うもので表示さ れていて、その値がinfに最初から入っていたものと合致! (PCI\VEN_1002&DEV_4380&SUBSYS_82311043)

というわけでドライバをインストール!
再起動
XPのロゴが出てバーが左から右へ行く画面まで到達!
DVDドライブが再起動したときに発する音を2回ほど流して不穏な雰囲気……
暗転

そのまま30分経過

さすがに動いてないと判断して再起動
DVDドライブが変な音を出すのは変わらずそのまま起動!

みごとXPもAHCI化か!?と思いきや

ハードウェア構成が大幅に変更されましたのでライセンス認証をお願いします

なんて言われて焦る。
とりあえずネットで認証して起動するとものの見事にXPの画面が帰ってきました!(IDE互換モードとAHCIモードをいちいち切り替えるのは面倒なのです)

が、DVDドライブがOSレベルで認識されておらずどうしたものかと思案中。
こればっかりはサウスブリッジのSB600とAHCI、DVDドライブの相性の問題らしい。

マザーボードのSATA接続ポートを変えてみた認識された。
休止状態に移行するときに先にHDDの電源が切れて再起動してから休止中のプログレスバーが動き出すのは仕様だろうが。

スペック
CPU:Athlon 64 X2 6000+ (89W)
M/B:M3A
MEM:1GB×4
HDD:ST3320620AS
HDD:HDP725032GLA360
DVD:DVR-215D

IDE互換モードに戻そうかな……。
プログラム的なもの | コメント:0 | トラックバック:0 |

学祭までもう少し

今年のシューティングは2P対戦を追加。
ついでにシェーダプログラムでエフェクト追加予定
AIほったらかしw

2P爆発ブラー
(※画面は開発中のものです
学祭当日には変更される恐れが大いにあります。)

左1P 右2P(被撃墜)
jpgボケ+縮小して更にボケてるのでわかりにくいけど2P画面に爆発ブラーを掛けてます。
1Pはノーマルな画面。

海面をリアルにしたいし、ライトブルームもつけたいなぁ。
……2P画面のブラーは正直かけるべきところじゃないんだけどね。

そういえばwindows7発売日だったねちょっと前まで
プログラム的なもの | コメント:2 | トラックバック:0 |

鯖 ※魚ではない

ついに9月に新記事書き損ねたw
微妙に更新はしたが。

カテゴリが違うような気がするが投下w

ml115g5
       ↑ML115 G5

安かったので同室と共同購入。1台当たり1諭吉でおつりがくるお手ごろ(?)価格
サーバー製品なのでモノはしっかりしてる。

HP ProLiant ML115 G5
CPU:Athlon 1640B 2.7GHz
MEM:PC2-6400 1GB ECC
HDD:160GB
OS:なし

卒研危ない上にK○WAMI COMBATも開発進めなきゃいけないのにVMwareいれてLinuxいれて勉強したいな~とか思いつつ。OpenSUSE重い(容量的な意味で)ですw

空の境界のカレンダーがw
プログラム的なもの | コメント:2 | トラックバック:0 |
| HOME |NEXT
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。