Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

高速化したい #4

Open
satakagi opened this issue Aug 20, 2019 · 3 comments
Open

高速化したい #4

satakagi opened this issue Aug 20, 2019 · 3 comments

Comments

@satakagi
Copy link
Collaborator

BLE通信がボトルネックになっていると思われるので、ここを効率化できれば・・・

短いコマンドで返り値が基本あまり意味がない、GPIO outやI2C write8/16などは複数の命令をひとまとめにして送れるかもしれません。

@satakagi
Copy link
Collaborator Author

satakagi commented Sep 4, 2019

実装をはじめています。
BLEの制限の範囲で、複数のコマンドを受け付けて一気に処理する仕組みです。

一方、API周りはなるべく既存の仕様で(仕様拡張しないで)できるようにしたいと思っています。
いくつかの案として:

  • write/output系のAPIは、即座に返答する(成否がわからない問題)
  • 呼び出し側でawaitせずに呼び出す(関数は今まで通り成否の返答を待って返す)

後者のほうがベターかな・・

@satakagi
Copy link
Collaborator Author

satakagi commented Sep 6, 2019

コーディングを進めました。まだ実装が足りてないところがあるのでそれを実装してからにしますが、だいぶ変えたのであまり自信が・・テストリリース的な感じにしましょうかね。

ここで動作検証中
https://svg2.mbsrv.net/chirimen/bt/tests/asyncTestLED.html

こんな感じでまとめて送信を効かせます

async function toggle10(){
	for ( var i= 0 ; i < 10 ; i++){
		if (led0==false){led0=true;} else {led0=false;}
		// awaitを付けずに連打でキューにためると、できるだけまとめて送信
		// 今のところGPIO writeでは最大で6個 (関数ごとに最大数は変化)
		gpioPort0.write(led0); 
		gdata0.innerHTML=led0;
	}
}

@satakagi
Copy link
Collaborator Author

satakagi commented Sep 10, 2019

GPIOの高速化テスト asyncを外して呼ぶことで、最大9出力を、かなり同時に近くコントロールできる(上の書き込み時から+3個増やした)
https://svg2.mbsrv.net/chirimen/bt/tests/asyncTestLED.html

I2Cの高速化テスト 一番重たいVL53L0Xの初期化を半分近い時間で終えられる
https://svg2.mbsrv.net/chirimen/bt/examples/I2C3_VL53L0X.html

まだ高速化できるポイントが残っているので、それにも手を入れたいと思っているのですが、micro:bit側のリソースがかなりいっぱいいっぱいになってきたので、リファクタリングしようかと思い始めています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant