SSブログ
プログラミング ブログトップ

プログラムソース(C言語)ファイル開発ツール [プログラミング]

他人が作ったプログラムを変更することにになり、
解析ツールを探してみた。
インターネットをググってDoxygen+Graphvizが使えそうであることを知る。
Windows7パソコンにインストールして利用した。
インクルード依存関係図、呼出しグラフ(Graphviz 2.26.3)など満足して使える。

ちなみに、このソフトで出力したXMLファイルをもとにUMLデータ入力として利用する市販ソフトもある。

私なりの注意点:
①INPUTソースがSHIFT-JISならINPUT_ENCODINGでCP932を指定する。
②呼出しグラフを作成する場合はDOTを指定する。
DOT_PATHでグラフツールのインストール先『C:/Program Files/Graphviz2.26.3/bin』(デフォルトインストール先)を指定する。
③出力結果に日本語表示を指定したい場合はOUTPUT_LANGUAGEにJapaneseを指定する。

WindowsXP USBドライバ開発 [プログラミング]

問題を抱えてしまった。
【現象】
USBケーブルでターゲット接続して、DeviceOpen,PipeOpenした状態で、
USBケーブルを抜き挿しする。
APからPipeClose,DeviceCloseを行うと、2度とDeviceOpenできない。
再度USBケーブルを抜き挿しするとOKとなる。
この問題はWin98では発生しない。
【調査】
USBケーブルを抜いた時に発生するメッセージイベントでは、
Win98とWinXPで下記の違いがある。
Win98ではIRP_MN_REMOVE_DEVICEが発生するのに対して、
WinXPではIRP_MN_SURPRISE_REMOVEとなる。

IRP_MN_SURPRISE_REMOVEが発生した時、
DeviceOpen、PipeOpen状態で、
続いてUSBケーブルを挿入すると、
CallUSBDにてc000009dのエラーとなり、
処理がUnloadまで至らない。 ※1
DeviceOpen、PipeOpenされていない状態では、
エラーにならず、続いてIRP_MN_REMOVE_DEVICE
が発生してUnloadとなる。

c000009dはデバイズの準備が整っていないエラーである。
このエラーが発生した場合の後処理に問題があるようだ。
【対策】
IRP_MN_SURPRISE_REMOVEが発生するときにも、
IRP_MN_REMOVE_DEVICEと同じ処理をするようにした。
※時間がないので結果オーライで対策したが、もっと良い解決方法があると思う。


プログラミング ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。