C-STyleでコンパス活用(その2)補足
id:ohguma:20150620#p1 の補足。
Facebook経由で次のコメントを頂いたので紹介。
-
-
- -
-
実はIF中で方位判定は使わないほうがいいです^_^ 特にelseifで判定が繰り返し続くと判定のたびにコンパス読みに行くので、どこにも当てはまらなくなったりしますし、すごく時間を食います。判定前にコンパス値を変数に代入してから判定回す方がいいです^_^
-
-
- -
-
先の記事の方式で if〜 elseif を繰り返すと、方向チェックのたびに「get_hmc()」が実行されることになり、その処理にすごい時間かかるのは事実で、実際に「get_hmc()」の処理時間を調べるとこんな感じ。
1000回のget_hmc()に約2秒=1回約2ミリ秒も掛かるため(A=Bのような変数代入だと1000回で0.2ミリ秒=1回0.002ミリ秒)、elseifで方向チェックを繰り返した分だけプログラムが遅くなるので、方向チェックの多用には注意する。
C-Codeが理解できれば、get_hmc()を使わない方向チェック関数を自作することも可能なので、興味がある方は調べて見て欲しい。
Teratermに出力する部分が見づらいので、csyファイルも掲載する。
下の枠内をテキストエディタに貼り付けて「時間計測.csy」というファイル名で保存すれば、C-Styleで開ける。Teratermの設定方法については id:ohguma:20150425 に記載した。
sprintf()の第2引数の「%ld」はパーセント、小エル、小ディ。
C-Codeで利用するC言語の詳細はこちら。
Title:Main - [ 時間計測 ] DAISEN C-Style for TJ3B [ Ver.20141024 ] - [Main - [ 時間計測 ]] CN01:Ball CN02:Line CN03:L-Touch CN04:R-Touch CN05:C-Touch CN06: CN07: CN08: CN09:RED3 CN10:RED2 [0000]:sno:08,cno:07,val:111111-110010-000020,cmt: [0001]:sno:33,cno:33,val:000000-000000-000000,cmt:char str[16+1]; // sprintf() tx_puts() で使う変数strは最初に定義する [0002]:sno:33,cno:33,val:000000-000000-000000,cmt: // 何も実行しない1000回ループの時間計測 [0003]:sno:30,cno:30,val:000000-000000-000000,cmt: [0004]:sno:05,cno:05,val:000010-000000-000000,cmt: [0005]:sno:05,cno:05,val:000100-000000-000000,cmt: [0006]:sno:00,cno:04,val:000000-000000-000000,cmt: [0007]:sno:00,cno:04,val:000000-000000-000000,cmt: [0008]:sno:31,cno:31,val:250270-000000-000000,cmt: [0009]:sno:33,cno:33,val:000000-000000-000000,cmt: // 方向取得の1000回ループの時間計測 [0010]:sno:30,cno:30,val:000000-000000-000000,cmt: [0011]:sno:05,cno:05,val:000010-000000-000000,cmt: [0012]:sno:05,cno:05,val:000100-000000-000000,cmt: [0013]:sno:31,cno:31,val:000410-000000-000000,cmt: [0014]:sno:00,cno:04,val:000000-000000-000000,cmt: [0015]:sno:00,cno:04,val:000000-000000-000000,cmt: [0016]:sno:31,cno:32,val:240272-000026-000000,cmt:A=Dir(HMC)の処理以外に掛かった時間を引く [0017]:sno:33,cno:33,val:000000-000000-000000,cmt:sprintf (str,"[Y]%ld ", gV[VAR_Y]); [0018]:sno:33,cno:33,val:000000-000000-000000,cmt:tx_puts(str); [0019]:sno:33,cno:33,val:000000-000000-000000,cmt: // 変数代入の1000回ループの時間計測 [0020]:sno:31,cno:31,val:010000-000000-000000,cmt: [0021]:sno:30,cno:30,val:000000-000000-000000,cmt: [0022]:sno:05,cno:05,val:000010-000000-000000,cmt: [0023]:sno:05,cno:05,val:000100-000000-000000,cmt: [0024]:sno:31,cno:31,val:000020-000000-000000,cmt: [0025]:sno:00,cno:04,val:000000-000000-000000,cmt: [0026]:sno:00,cno:04,val:000000-000000-000000,cmt: [0027]:sno:31,cno:32,val:230272-000026-000000,cmt:A=B の処理以外に掛かった時間を引く [0028]:sno:33,cno:33,val:000000-000000-000000,cmt:sprintf (str,"[X]%ld\r\n", gV[VAR_X]); // \r\nで改行 [0029]:sno:33,cno:33,val:000000-000000-000000,cmt:tx_puts(str);