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()による、時刻変換

などの例が含まれています。