ページへ戻る

− Links

 印刷 

OSASK_Faults のバックアップソース(No.6) :: OSASK計画

osaskwiki:OSASK_Faults のバックアップソース(No.6)

« Prev[4]  Next »[5]
* OSASKの例外情報
-アプリプログラミングやってて、例外が出た!というときに参考になるかもしれないページ。
-ちまちま追加します。
-''この情報に頼りすぎてはいけません。''基本はintroaの「8.オリジナルプログラム開発へのアドバイス」の作り方で地道に進むのが正解です。
-ここに書いていない例外が出て悩んだら、OSASK-MLに投稿しましょう。そしたら、[[K]]がここに情報を追加します(たぶん)。

*** CSの値で見分けよう!
|CS|死亡箇所|
|0007|ユーザプログラム (mapファイルを見て死亡箇所を探れます)|
|00C7|pioneer0.ask|
|0207|DLLなど (DLLを作ったときに出てきたmapファイルで死亡箇所を探れます)|
|0010|init.ask|
|0020|vgadrv.ask, vesa8.ask, vesa16.ask, vesa32.askのどれか|
|0040|keymos0.ask|
|0050|timerdrv.ask|
|0060|tapi0.ask|
|0090|papi0.ask|
|00B0|decode0.ask|
|00E0|fdcdrv0.ask|

*** 00C7:pioneer.askの死亡情報
-ぐいぐいの標準ライブラリ
-バージョン:ver.3.3 (OSASK ver.4.2)

|EIP|INT|関連ML|理由|
|000005DF|03||読んだ以上にシグナルを取得したことを報告しようとした|

*** 0020:PCAT/vgadrv.askの死亡情報
-PC/AT互換機用VGAモードグラフィックドライバ
-バージョン:ver.2.0 (OSASK/AT ver.4.3)

|EIP|INT|関連ML|理由|
|000009A3|0C||8bppグラフィックボックスに16以上の数が入っていた|

*** 0050:PCAT/timerdrv.askの死亡情報
-PC/AT互換機用タイマドライバ
-バージョン:type-A ver.1.1 (OSASK ver.?.? - 4.1)

|EIP|INT|関連ML|理由|
|000005D4|03|[[[OSASK 6493]>ML:6493]]|待機状態にあるタイマに対して、設定を行なおうとした|

*** 0090:papi0.askの死亡情報
-ページングドライバ
-バージョン:ver.0.6 (OSASK ver.?.? - 4.1)

|EIP|INT|関連ML|理由|
|00000788|03||マッピングされていないアドレスへアクセスした(註1)|
|000007C3|03||物理メモリが足りなくなった|
-(註1) 不正アクセスを起こした命令は、CS:EIP = EDX:ECXのところにある

* こめんと欄
-大変ありがたいですm(_ _)m  -- [[JUGZZY]] SIZE(10){2003-09-26 (金) 18:04:30}
-昨日の00C7のを書きましたが、これでいいでしょうか? -- [[あっきぃ]] SIZE(10){2003-11-03 (月) 15:55:39}
-INT 0x0C CS:EIP = 0020:000009A3 OSASK4.3 イメージ描画中に落ちました。-- [[ベイサイド]] SIZE(10){2004-01-09 (金) 23:33:44}
-多分VGAモードだと思いますが、8bppグラフィックボックスに16以上の数が入っていたのだろうと思います。 -- [[I.Tak.]] SIZE(10){2004-01-10 (土) 20:22:10}
-この報告を表に追加しておきました。 -- [[K]] SIZE(10){2004-01-11 (日) 12:39:53}
-lib_flushgraphbox(0x8001, window, x, y, w, h, 200 - w, (char *) gbox + 64 + x + y * g_mainWinWidth); で w = 0; のとき、CS:EIP=0020:009A3 が発生。 -- [[ベイサイド]] SIZE(10){2004-01-21 (水) 01:36:34}
-w=0っていうのはつまり0ドットなので、そんな指定をするのはおかしいんじゃないかなあ。たぶん0を指定すると42億を指定したとみなされて、そうなるとメモリの果てまでアクセスすることになり、その中には当然16以上の数値が入っているところがあるのでは? -- ''K'' SIZE(10){2004-01-21 (水) 01:48:35}
-0文字描画のときもそうでしたが、関数の引数は可変なので0になることもあります。どの関数のどの引数が0を許してないのかわからないと今回みたいに泥沼になってしまいます。結局気づくのに半日かかりました。ちなみに(x0,y0)-(x1,y1)でx0=x1のときw=0(縦線)になります。 -- [[ベイサイド]] SIZE(10){2004-01-21 (水) 10:06:06}
-ああ、x1やy1をそういう風に捉えているのなら、wやhの計算方法を見直す必要があります。wやhはx1-x0などという意味ではなく、描画サイズであることに注意してください。 -- [[K]] SIZE(10){2004-01-21 (水) 10:45:05}
--w = x1 - x0 + 1;
--h = y1 - y0 + 1;
-OSASKのAPIでは、サイズを示すすべてのパラメータで、0を指定するのを禁じています。そのような呼び出しに意味がないからです(ファイルサイズ変更などでは意味があるので例外的に0でもよい)。0になるかもしれない場合はサイズが0以外のときだけにAPIを呼ぶようにしてください。これは将来OSASKが安全モードAPIを持つようになっても変わりません。安全モードでサイズ0を指定するとエラーメッセージが出てどれが原因かを教えてくれますが、アプリが強制停止させられることにかわりはありません。 -- ''K'' SIZE(10){2004-01-21 (水) 10:51:03}
--(例) if (w > 0 && h > 0) lib_flushgraphbox(...);
-大変参考になりました。0を禁止しているのは仕様だったんですね(笑) -- ''ベイサイド'' SIZE(10){2004-01-21 (水) 15:32:42}

#comment


« Prev[4]  Next »[5]