忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。




2025/03/16 07:44 |
VisualC++⑥
さて、実際の1mS取り込みルーチンはこんな感じ…

void CALLBACK timerProc(UINT uTimerID, UINT uMsg,
DWORD dwUser, DWORD dummy1, DWORD dummy2){
//データ読込
nRet = DioInputDword(hDeviceHandle,
 FBIDIO_IN1_32,&nBufw64[0]);//CH1-32を取り込む
nRet = DioInputDword(hDeviceHandle,
 FBIDIO_IN33_64,&nBufw64[1]);//CH33-64を取り込む
…他の処理…
return;
}

このプログラムを入れる場所はMainView.cpp内の定義後すぐの位置、つまりグローバル変数エリアで登録します。
そして起動は

// タイマー割込の開始!!
MMRESULT timerID = timeSetEvent(1, // 間隔[ms]
0, // 分解能 0なら1mS
timerProc, // 割り込み関数
(DWORD)&count, // ユーザーパラメータ
TIME_PERIODIC | TIME_CALLBACK_FUNCTION // 動作フラグ
);//タイマスタートOn!

で開始されます。
この開始コマンド記載場所もグローバルMainView.cpp内の最初の方です。

コンパイル時にちょっと厄介なのは、デバイスドライバの認識です。
割込みルーチンの記述にはI/Oボードのアクセスがあります。
標準的なエクスプローラで作成されるスタンダードな関数内に括ってしまうとデバイスがオープン(初期化)されていないというエラーを出します。
プログラムコーティングシーケンスの順序についてもこのような考慮ポイントが存在しています。




PR



2009/03/24 10:20 | Comments(0) | 電気

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<VisualC++⑦ | HOME | VisualC++⑤>>
忍者ブログ[PR]