Presentation is loading. Please wait.

Presentation is loading. Please wait.

HandleIOにふれる ヒント プログラムは別途配布しています。 Copyright, 2010 © Scarly Hardware.

Similar presentations


Presentation on theme: "HandleIOにふれる ヒント プログラムは別途配布しています。 Copyright, 2010 © Scarly Hardware."— Presentation transcript:

1 HandleIOにふれる ヒント プログラムは別途配布しています。 Copyright, 2010 © Scarly Hardware

2 HandleIOにできること HandleIOはパソコンからの信号入出力(I/O)を簡易に行うことができます。
FT245というUSBデバイスを制御できます パソコンからの信号出力をFT245に向けて行うと、FT245は信号を8bit単位で出力してくれます。 同様に、FT245からの入力もパソコンに向けて(8bit単位で)送ってくれて、パソコンは信号を取り込めます。

3 LEDをつないでみる

4 LCDをつないでみよう

5 LEDにつなぎ変えて信号の送信パターンを見てもらおう

6 温度計を接続して温度を計測

7 Handleに関して

8 ウインドウハンドルという番号 ウインドウズでは一つ一つのウインドウに16進数で番号を振っている
各ウインドウの番号がわかると、ウインドウを操作することが可能となる。

9 HANDLELIST関数 ウインドウハンドル一覧を表示する

10 ほかのウインドウにいたずらしてみよう ウインドウを半透明にしてみる(layer関数)
ウインドウのタイトルを書き換えてみる(sendtext関数) ウインドウの内容を書き換えてみる(REPLACESEL関数)

11 HANDLEFIND関数 ウインドウタイトル一覧からウインドウ名が一致するものをリストアップする

12 GETWINDOWHANDLE関数 ウインドウハンドル(16進8桁)の番号から、親子関係のウインドウ(ハンドル番号)などを取得する

13 SendText関数 ほかのウインドウのタイトルテキストを書き換えるのに使用する

14 REPLACESEL関数 エディタなどの文字列追記に使用する

15 BNCLICK関数 ボタンを押したことにしてくれる関数で、引数にボタンのハンドルを入力してあげる。

16 WhatTheTimeNow関数 現在時刻を取得、表示してくれる関数

17 時刻連動 何時になると何かをする 一時間おきに温度を計測する 14時00分の温度を(一日おきに)計測する

18 WAITTIME関数 特定の時刻までWAITしてくれる関数 パラメータは秒 分 時の順に与える。(分や時は書かなくてもよい)
オルゴールの定時再生 (下記の場合には12:00分に鳴る) WAVファイルでオルゴールを取り込んでおく必要性あり WAITTIME d’0 d’0 d‘12 ♪ loop_5.wav

19 WAITPUMP関数 数ms~数分待ちたい場合に使用する
何らかの作業を順番に行うときに、一旦停止していてほしいときがある。そのようなときに用いる関数 2000ms(2秒)待つ場合 waitpump 2000 お風呂タイマー/カップラーメンタイマー/キッチンタイマー

20 EXEC関数 別のプログラムを呼び出したい場合に用いる exec notepad等

21 ここからは、時間に余裕がある場合に解説

22 64bit化とレガシーデバイス化 パラレルポートはレガシーデバイス SCSI・ゲームポートはレガシーデバイス
BEEP音を発する(8254経由)スピーカはレガシーデバイス

23 32bit Windows と 64bit Windows
一度に計算する(処理する)量が違う さらに CPUのレジスタ数が増えた。 関数などを呼び出すときに、(関数のパラメータをスタックに積まず、CPUの レジスタ に書き込んで処理をする場合がある→CPU有効利用によりプログラムが高速実行される) 64bit Nativeな(64Bitシステム用に作られた)プログラム 以外の32bitプログラムもある程度動作する。

24 32bit Windows と 64bit Windows
HandleIOは32bit専用プログラムなので、正常に動作しない機能もある。 Beepをかけようと、 (HandleIOを用いて)0x61番I/Oポートを操作してみると、64bit Windows上ではなかなか思い通りに動かない。 これは64bit windows7 ではセキュリティが強化されている事が要因 out h'61 b' out h'61 b'

25 セキュリティが強化されている事による不具合
未署名なデバイスドライバは動作してくれない(一時的に動かす方法はある) 一時的に動作させる場合にはF8キーを押しながらブートする

26 64bit Win7では、I/Oの61hをどう割り当てているのか
マザーボード リソース

27 I/Oアクセス実験 64bit WINDOWS7から 0x61番ポートを直接たたいてみる
(セキュリティが影響しているらしく、一瞬しかならない) 32bit WINDOWS XP(仮想マシン上)から0x61番ポートをたたいてみる

28 BEEP音は64bit環境でも鳴るのか BEEP関数を呼び出してみる
BEEP関数は kernel32.dllに存在する(さらにはntdll.dllを呼び出している)。

29 BEEP音は64bit環境でも鳴るのか 参考文献: によると、 8254出力ラインは、サウンドカードの専用入力につながってる beepはもう、パソコンのスピーカーから再生されている

30 レジスタ演算 HandleIOは変数のない言語… すべてはレジスタに記憶
REG100/REG10等 一個のレジスタには32bitのデータを格納できる mov reg100 d’10 mov reg101 d’5 calc reg100 / reg101 reg102 dispd reg102

31 decz関数 レジスタ -1を演算して結果が0の時にはすぐしたの命令を飛ばして、次の行に進む mov reg100 5
l'loopstart calc reg200 * d'10 reg200 decz reg100 jmp l'loopstart l'finish dispd reg200

32 HandleIOとプログラミング なぜプログラミングに話を持っていくのか… 外部の状態を取り込んで何かをさせる
プログラムを自分で書くと、発散の方向性にむかう 応用性の高さ 色々な応用が利く 外部の状態を取り込んで何かをさせる 温度計をつないで、何度以下ならヒータースイッチOn CDS(光導電セル)をつないで、暗くなってきたら自動で照明On

33 HandleIOの難しいところ アセンブラの考え方をベースにしているため、使いこなすにはそれなりの知識が必要。条件分岐などさせると、結構ややこしくなる

34 クロージング 64bit化した、Nativeなアプリケーションにする必要性
Handle一覧を表示するとき、64bitでは2倍幅の一覧表示ができるはず レジスタも32ビットで1レジスタではなく、64ビットで1レジスタとできるはず


Download ppt "HandleIOにふれる ヒント プログラムは別途配布しています。 Copyright, 2010 © Scarly Hardware."

Similar presentations


Ads by Google