2020年8月5日水曜日

サンプリングせずにダイレクトにビットを格納してみると…

作業としてはあまり大変そうではなかったので、コピペして切り張りして試してみました。
最初、ちょっと間違えてLOW信号の長さを見てしまったため、FFFFFFFFFFになってしまいましたが、見直してすぐに正しい処理が流れてよかったw
インターバルのデバッグもそのままコピーしたのでログから実行時間を比べてみました。

[622234.379140] gpioread_close
[622265.193242] gpioread_open
[622265.207469] start:1 end:1 idx:84
[622265.207475] t_p[0]:3800156299
[622265.207480] t_p[1]:3800156301
[622265.207484] t_p[2]:3800156301
[622265.207489] t_p[3]:3800156301
[622265.207494] t_p[4]:3800156301
[622265.207498] t_p[5]:3800156314
[622265.207503] t_p[6]:3800170363
[622265.207511] t_p[7]:3800170394
[622265.207517] t_p[8]:3800170400
[622265.207547] gpioread_close
[622267.280974] gpioread_open
[622267.295349] start:0 end:1 idx:83
[622267.295362] t_p[0]:3802244103
[622267.295374] t_p[1]:3802244107
[622267.295389] t_p[2]:3802244107
[622267.295407] t_p[3]:3802244108
[622267.295420] t_p[4]:3802244108
[622267.295431] t_p[5]:3802244141
[622267.295443] t_p[6]:3802258169
[622267.295454] t_p[7]:3802258260
[622267.295465] t_p[8]:3802258277

 14,101 と14,174となっています。よく見るとt_p[8]があるので、150サイクルの時間も加味された状態です…

[622618.787950] gpioread_close
[622624.712950] gpioread_open
[622624.717136] t_p[0]:4159676006
[622624.717141] t_p[1]:4159676008
[622624.717146] t_p[2]:4159676008
[622624.717151] t_p[3]:4159676008
[622624.717156] t_p[4]:4159676008
[622624.717160] t_p[5]:4159676022
[622624.717165] t_p[6]:4159680062
[622624.717170] t_p[7]:4159680062
[622624.717175] t_p[8]:4159680069
[622624.717199] gpioread_close
[622626.790413] gpioread_open
[622626.794744] t_p[0]:4161753551
[622626.794757] t_p[1]:4161753555
[622626.794770] t_p[2]:4161753556
[622626.794781] t_p[3]:4161753556
[622626.794793] t_p[4]:4161753557
[622626.794804] t_p[5]:4161753589
[622626.794816] t_p[6]:4161757657
[622626.794827] t_p[7]:4161757657
[622626.794839] t_p[8]:4161757673

直接フォーマットデータに落とし込んだ時は、4,063と4,122になりました。これも同じく150サイクルが含まれていますw

実行時間の差は、ほぼ10,000μsとなっていて10ms程度の差が出ています。
予想以上に差が出ましたが、実際はここからアプリ側でサンプリングからビットを立てる処理が加味されてくるので、処理量を一致させるとまだ差が開いてくると思います。

それと、引数がサンプリングの場合は100個の配列が含まれているので結構大きいですが、センサーから送られてくるのは結果的に5バイトしかないのでこの差も結構大きい気もします。
ただ、デバッグを見ても
pi@rasp4b4g:~/gpioread $ python3 ./dht.py --debug
Output for debugging.
gpio_no : 5
data format : 3C 00 1E 05 5F
2nd read.
data format : 3B 00 1E 06 5F
DHT results.
Conversion  : DHT11V1.3
Temperature : 30.6 C
Humidity    : 59.0 %
ぐらいしか表示されなくなってしまうので、味気なさすぎるかも。もう少し情報を付加させた方がいいかもしれません。

pi@rasp4b4g:~/gpioread $ python3 ./dht.py --debug
Output for debugging.
gpio_no : 5
respons low  : 82
respons high : 87
data high '0': 24 ~ 25
data high '1': 70 ~ 72
data low     : 53 ~ 54
data format : 3F 00 1F 06 64
2nd read.
respons low  : 64
respons high : 87
data high '0': 24 ~ 26
data high '1': 70 ~ 72
data low     : 53 ~ 55
data format : 40 00 1F 06 65
DHT results.
Conversion  : DHT11V1.3
Temperature : 31.6 C
Humidity    : 64.0 %

このぐらいあれば、何かあっても判断しやすいかな?
[625567.795574] gpioread_close
[625607.520887] gpioread_open
[625607.525066] t_p[0]:2847516662
[625607.525072] t_p[1]:2847516664
[625607.525077] t_p[2]:2847516664
[625607.525081] t_p[3]:2847516664
[625607.525086] t_p[4]:2847516664
[625607.525091] t_p[5]:2847516678
[625607.525096] t_p[6]:2847520717
[625607.525101] t_p[7]:2847520717
[625607.525124] gpioread_close
[625609.598417] gpioread_open
[625609.602610] t_p[0]:2849594294
[625609.602623] t_p[1]:2849594304
[625609.602635] t_p[2]:2849594304
[625609.602647] t_p[3]:2849594304
[625609.602659] t_p[4]:2849594305
[625609.602677] t_p[5]:2849594338
[625609.602689] t_p[6]:2849598174
[625609.602702] t_p[7]:2849598258
今度は150サイクルカウントウェイトは外したんですが、4,055と3,964でなぜか2回目の方が早かった。実行時間に関してはループ中に処理が増えただけなので、ほぼ変わらないはず。また比較処理を入れても数値上は問題なさそうなのでこんなところでしょう。デメリットは引数が、3個だったのが8個増えて11個になったぐらいでしょうか。

0 件のコメント:

コメントを投稿