Windowsにおける基本のコンソールアプリ開発
Visual C++でのコンソールアプリ開発
最初に基本的なアプリの例として、リモート接続して、ADCと温度を読み出し、終了するだけのシンプルなアプリの開発例を示します。
Visual C++を用いてWindows版アプリを開発するには、
- DLL本体・・・libcsz.dll
- インポートライブラリ・・・libcsz.lib
- ヘッダファイル・・・cosmoz.h
が必要です。
現時点で提供されているWindows版ライブラリはx64版のみとなっていますので、
Windowsアプリは64bit構成でビルドしてください。
以下の例ではシンプルな例を示すためにMS-DOSプロンプトで動作するコンソールとしますが、Visual Studioの知識のある方はライブラリやヘッダをプロジェクトに登録して、プロジェクトやソリューションを作成し、統合開発環境から利用できるようにしてください。
準備
cosmoz.hをインクルードパスの通ったフォルダに置き、libcsz.libをライブラリパスの通ったフォルダに置いてください。libcsz.dllは生成されたexeファイルと同一のフォルダに置いてください。
最初のプログラム
プログラムの例を示します。このプログラムをテキストエディタなどでコピー・ペーストしてtest.cppとして保存してください。なお、#include文にある<>は、半角の<>に書き換えてください。
#include <stdio.h>#include <cosmoz.h> int main (int argc, char *argv[]) { if(argc <= 1) return -1; if (csz_open(INTERFACE_TCPIP, argv[1]) == FALSE) { printf("Cosmoz driver open failed.\n"); return -1; } csz_adc_freq(80); // ADCのサンプリング周波数を80MHzにする csz_adc_reset(); // ADCをリセットする printf("ADC CH1 value = %d\n",csz_adc_val(1)); // CH1の値を読み出す printf("Current FPGA temperature = %f [C]\n"csz_xadc_tempe()); // 温度を読み出す csz_close(); return 0; }
test.cppと同じフォルダにlibcsz.dllと、libcsz.libとcosmoz.hを置いてください。
コンパイル方法
Visual Studioのコマンドプロンプト(x64版)を開き、CDコマンドで上記のファイルがあるフォルダに移動し、以下のようにコマンドを入力します。
cl test.cpp /I. libcsz.lib
test.cppがコンパイルされてtest.exeが生成されます。
/I.は、現在のディレクトリからインクルードファイルを探すことを示します。
コンパイルのあとlibcsz.libがリンクされ、test.exeが生成されます。
実行
コマンドプロンプトで、test ホスト名 と入力して実行します。
ホスト名は、Cosmo-Zであればデフォルトはcosmoz、Cosmo-Z Miniであればcszminiです。
ADCのCH1の値と、FPGAの温度が取得されて表示されます。
プログラムの解説
Cosmo-Zを操作するための関数をAPI(Application Programmer Interface)と呼びます。Cosmo-ZのAPIはcsz_で始まる名前の関数となっていて、cosmoz.hですべて定義されていますので、APIの使用方法を知るにはcosmoz.hをご覧いただくのが一番近道です。
ここでは簡単なAPIをいくつか解説し、Cosmo-Zプログラミングの概略を示します。
ターゲットへの接続
csz_open()の第一引数のINTERFACE_TCPIPはcosmoz.hで定義された定数で、TCPIPでリモート接続することを示します。
第二引数は文字列で、Cosmo-ZのIPアドレスとポート番号を指定します。指定方法の例としては
- "192.168.1.100"
- "192.168.1.100:1069"
- "cosmoz100"
- "cosmoz.local"
などです。IPアドレスの代わりにホスト名を指定することもできます。ポート番号を省略した場合は1069番が使用されます。
接続に成功するとcsz_openはTRUEを返し、失敗するとFALSEを返します。
ターゲットとの切断
csz_close()を実行すると、ターゲットとの接続が切断されます。
ADCのサンプリング周波数変更
csz_adc_freq(周波数)関数で、ADCのサンプリング周波数を設定できます。周波数はMHz単位で与えます。
ただし、利用できる値は80,100,125の約数となります。ADCは常に80MHz,100MHz,125MHzでサンプリングを行い、何個かに一個のデータを採用する(デシメーション)ことで40MHzや25MHzといったサンプリング周波数が設定されます。そのため、25MHzに設定した場合はADCは100MHzで動作するため、80MHz版のCosmo-Zではオーバークロックとなりますのでご注意ください。
ADCのリセット
ADCの周波数を変更した後には、csz_adc_reset()関数を呼び出してリセットを行ってください。
ADC値の読み出し
csz_adc_val(チャネル番号)は、ADCの現在の値を読み出します。チャネル番号は1から始める数字で、最初のチャネル番号は1です。(0ではない)
この関数を実行すると、ADCの値が電圧ではなく生のバイナリ値として返されます。この関数では現在の値を読むという単純なものなので、連続したサンプリングや、複数のチャネルで同時に読み出すということはできません。
連続サンプリングなどの高度なサンプリングのAPIは別に用意されています。
温度の読み出し
FPGAに内蔵されたXADCという機能を用いて、FPGAの温度を測定することができます。
csz_xadc_tempe()関数は現在のFPGAの温度(摂氏)をdouble型で返します。
より高度なプログラムの例
連続キャプチャなどを含むより高度なプログラムの例は、Windows版ライブラリをダウンロードした際に同梱されているcaptureフォルダをご覧ください。
capture.cppには
- csz_adc_getinfo()によるADC情報の取得
- csz_capture_status()によるADCステータスの取得
- csz_capture_abort()による前のキャプチャの強制終了
- csz_capture_timeout()によるキャプチャタイムアウトの設定
- csz_capture_execute()による連続キャプチャの開始
- csz_capture_datacopy()によるキャプチャデータの取得
- csz_time48()による10ns単位での時刻計測
- csz_adc_getfreq()によるADC周波数の取得
- csz_pretrig_get()によるプレトリガ長の取得
- csz_point2us()による、時刻変換
などの例が含まれています。