CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

ターゲット/ホストプログラム

これでUSB通信の準備が整ったわけですが実際の電文のやり取りのためには
ターゲット(ボード)側、ホスト側でそれぞれプログラムを作る必要があります。

まずターゲット側。
パイプ1を通して受信したときに起動される処理で受信バッファの内容をシリアルコンソールに
吐き出す処理を組み込みます

void do_rx1(void)
{
 int i;
 putstr("RECV1\n\r");
 for(i=0;i<8;i++)
 {
  sprintf(str,"%02X ",R1_DAT[i]);
  putstr(str);
 }
 putstr("\n\r");
}

一方、ホスト側はVC++2008のコンソールプログラムで作成。
USBデバイスのオープン、パイプ1をオープンし8バイトのデータをUSB出力するだけです

// USB.cpp
//
#include "stdafx.h"
#include "uusbd.h"
int _tmain(int argc, _TCHAR* argv[])
{
 HUSB husb;
 HANDLE h;
  char buf[8];
 DWORD ret,size,i;

 // USBデバイスをオープンする
  husb = Uusbd_Open();
  // デバイスのインターフェース0パイプ1のハンドルを得る
  h = Uusbd_OpenPipe(husb, 0, 1);
 // 8byte書き込む
 for(i=0;i<8;i++)
 {
  buf[i]=i;
 }
 ret = WriteFile(h, buf, 8, &size, NULL);
  // クローズする
 CloseHandle(h);
 Uusbd_Close(husb);
 return 0;
}

こういうように通信系の上位下位のプログラムを同時開発するときはWindows環境のありがたさがわかります
左上から
・ターゲットプログラムの編集(エディタ)
・ターゲットプログラムのビルド環境(DOS窓)
・ターゲットプログラムの出力先(シリアルコンソール)
右上から
・ホストプログラムの編集ビルド/デバッグ環境(VC++統合環境)
・ホストプログラムの実行環境(DOS窓)

イメージ 1


これを1台のPCでウィンド切り替えでできるのは今でこそ当たり前ですが
上位下位それぞれにデバッガ/ICE、シリアルコンソール等で
何台もPCを並べてデバッグなんて時代もありました