PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.10

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆C++でUSB(HID)アクセスプログラムを作成

PIC側のプログラムはC18コンパイラを使わずPICアセンブラで作成しますが、パソコン側のUSB(HID)アクセスプログラムはBorland C++コンパイラで作成します。
しかしこれがまた難物で悪戦苦闘の連続でありました。

[第40回]

●インクルードファイルについてなど

前回お見せしたHIDデバイス検出プログラムなのですが、このままでは全くコンパイルできそうにないことに気がつきました。
もう何日も、「わからん」「できん」の繰り返しで、その間、あっちのサイト、こっちのサイトと訪ね歩いては、プログラムのカットアンドトライを繰り返してきたものですから、最終的に動くプログラムが出来あがったときには、その過程でおこなったあれこれについて、全く記憶をなくしてしまっておりました。

繰り返し書いておりますように、私はBorland C++を使っておりますが、今回のプログラムをそのままコンパイルしようとしますとやたらエラーが出てしまいます。
そもそも、あちこちのサイトで参考にさせていただいたプログラムが、一様にインクルードしているヘッダーファイルのいくつかが、Borlandのincludeフォルダに含まれていない、という悲しい現実に打ちひしがれたことすらも、すっかり忘れてしまっておりました。

前回、hidsdi.hのままだとエラーになるので、ちょいと細工をしてhidsdi2.hをつくりました、なんてウソ八百を書いてしまいました。
hidsdi.hそのものが、Borlandのincludeフォルダには存在してなかったのですよお。

●Borland C++コンパイラについて

あ。まずは肝心のことから書かねばいけませんでした。
確かBorland C++については、以前にCPUをつくろう![第189回]CPUをつくろう![第278回]で紹介いたしました。
フリーのC++コンパイラです。
前回も少し書きましたが、最近はC++といえばVisual C++というのがはやりのようで、「どうしてVisual C++で書かないのだ」とお叱りをいただいてしまうかもしれません。
でも私はどうもあのGUIといいますか、ああいう開発環境が好きになれませんで、簡便シンプルなコマンドラインでやりたいのですよ。
そういう点ではBorland C++は私の好みにピッタリ合っているのです。

そういうことですから、これからも当サイトで説明をしていきます予定のC++ソースプログラムは、Borland C++でコンパイルすることのみが前提になりますので、あしからず。

上にも書きましたように、Borland C++はCPUをつくろう![第278回]で次のように紹介をいたしました。

提供元はBorlandからCodegearに移っていますが、今でも(2009年7月現在)、codegearのサイトから無償でダウンロードできます。
上記サイトの「C++Compiler5.5/Turbo Debugger」がBorland C++コンパイラです。

半年ぶりに上記codegearのサイトに行ってみましたら、なんだかサイトのレイアウトがすっかり変わってしまったようです。
「C++Builderトライアル版」は有償ソフトのトライアル版です。お間違えのないように。
その下に書いてある、

C++コンパイラのダウンロード
C++Compiler / Turbo Debuggerは、こちらのページからダウンロードいただけます。

というのが、無償版です。
私は、C++入門書についていたCDROMから落としましたので、このサイトからのダウンロードについては、委細承知しておりません。サイトの指示にしたがってダウンロードしていただきますように。

なお、Borland C++は開発を停止してからかなり年月が経っています(最終版はV5.5)し、Visual C++がハバを利かせている現状から考えると、早晩ダウンロードできなくなってしまうことも考えられます。
Borland C++を使ってみよう、と思われる方は早めのダウンロードをおすすめいたします。

●WinDDK

さて話をもとに戻しまして、hidsdi.hが無いことにはHIDをアクセスするためのさまざまな関数が使えないらしい、ということなので、どこかから調達しなくてはなりません。
なんなのでしょうねえ、この不便さは。

文句を言ってもはじまりませんから、またまたWEBで捜索をいたしました。
どうやら、Microsoft様ご提供のWinDDKなるものに含まれているらしいということがわかりました。
そんじゃあ、そいつをダウンロードさせていただきましょうか。
で、Microsoft様のサイトに行きましたら。
ISOイメージでのダウンロードなのだそうです。
まあなんと面倒なこと。
仕方がありませんから、ダウンロードしたそいつを一旦CDROMに焼いて、それからあらためて、そのCDROMからインストールいたしましたよ。

この記事を書くために、Microsoft様のサイトを訪問してみましたら、WinDDKなど、もう無いらしいのですね。
もともとどこを捜したらよいのやらよくわからないサイトですことゆえ、どこかに隠してあるのかもしれませんが…。
あ。どうやら今はWinDDK(Driver Development Kit)ではなくて、WDK(Windows Driver Kit)というらしいのだそうですが。

ともかく私のときは、まだWinDDKです。
インストールしてできたDDKのフォルダの中を捜してみましたら、ありましたよ。
hidsdi.hが。
これこれ。やっとみつかった。
さっそくこれを、HIDプログラム作業中のフォルダにコピーして、コンパイルしてみましたら。

今度は、hidpi.hが無い。とのことで、またもやコンパイル失敗。
hidsdi.hにhidpi.hをインクルードしているのだそうで。
なんなのだ、まったく(だから、Cは嫌いだ)。

ぶつぶつぼやきながら、またまたWinDDKのフォルダを探って、みつかったHidpi.hをコピーして、コンパイルしましたら。
前回お見せした、あの「未解決」というエラーが表示されてしまいました。

●かくしてWin98DDKを捜して放浪の旅へ

結果から申しますと、この「未解決」というエラーは、Windowsのバージョンとは関係がなかったのでありますが。
そんなことは、あとからわかったことですから。
あの時点では、てっきり私は、こいつは「WindowsXP」と「Windows98」の違いに由来するものと、思い込んでしまいました。
ISOイメージでダウンロードしたWinDDKは当然WindowsXP以降のもの。
でも私は例によって、Windows98で作業中。

今になって考えてみれば、そりゃあまったく的外れだったわけで、まだBorland C++コンパイラでコンパイル作業中なのでありますから、Windowsのバージョンが関係するわけはありませんです(う。いや。あるいは関係するのかも)。

[2010.2.9注記]
前回([第39回)のDOS窓の表示をよく見ていただきますと、コンパイルはエラーにならずに通っていることがわかります。
関数が「未解決」というエラーはリンクの過程で出ていることがおわかりいただけると思います。
コンパイルでは、警告W8004…が出ているだけです。
そのあとの、Turbo Incremental Link…というのが、リンク作業に入りましたよ、という表示です。
その表示のあとで、Error:…が出ていますから、このエラーはコンパイラによって出されたものではなくて、リンカーが出したものだということになります。
ということになると、コンパイラによって作成されたオブジェクトプログラムを、Windows内にあるであろう、HidD…のオブジェクトプログラムとリンクしようとして、そこでなんらかの不具合が発生した、と考えられるわけでありますから、あの時点で、私が「こいつはWindowsのバージョンの違いに起因するエラーに違いない」と思ったことは、あながち根拠のないことではありませんでした。
[注記ここまで]

んでも、私は、なにをやってもコンパイルエラーばっかりで、もう酸欠状態で、いい加減、知能も低下してしまっておりましたので、これはもうWindows98版のWinDDKを入手するしか、ほかに解決策はない!
と、そのように思い込んでしまいました。

もう目が血走っておりました。
んなもの、今ごろ、みつかるはずがないのに…。

ところが、ところが、見つかってしまったのですよ。Win98DDKが!



うう。でもなんだか不気味でやばそうな感じ。
こりゃあちょっと、悪趣味じゃありませんかあ。

果たして。ほんものか?
セットアップした途端に、ハードディスクがクラッシュしたりして…。
しかし、ここまできたら、やるしかない!

どうやら、純正品のようでありまして、なにごともなく無事セットアップできました(やれやれ。安堵)。

それはともかくとしまして。
いやあ、捜してみるもんですねえ。
これはもう、私にとって、お宝以上です。

え?
こんなもの、どこでみつけたのか?ですか。

うう。それを言うのは、そりゃあ、ちょっとやばいんじゃありませんかあ。
まあ、いまどきこんなものが欲しいというのは、私くらいのものかもしれませんけれど、それでも、他言は無用、ないしょ、ないしょ。
ということでありましょう。

で、さっそくその、Win98DDKのフォルダからコピーした、Hidsdi.hとHidpi.hを組み込んでみたのでありますが…。
結果は同じ。
やっぱり、「未解決」のままでありました。
CPUをつくろう!第432回(2010.2.8upload)を再編集

PICでUSBを![第40回]
2011.7.10upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る