<< 2024年07月
新着記事
最近のコメント
月別
カテゴリ
2024.02.13 14:54

digitaWrite/digitalReadは遅いな

ひのと ひつし
・Pico+Arduino IDEでdigitalWriteとdigitalReadを使って入力の変化を検出してGPIOを叩くまでの速度を測ってみたらやたらと遅い。一回のAPI実行に660nsくらいかかる感じ。そこまで遅いか?とちょっと検索してみたら、やはりdigitalOutを使うとそんなものらしい。直接レジスタを叩けば良いのだけど、きっと誰かやっていると思ってドキュメントを漁ってみたら、Using the Raspberry Pi Pico SDK (PICO-SDK)ということで、Pico-SDKのライブラリ、簡単に言えばArduinoとしてマイコンを横断した汎用性を優先しないPico専用ライブラリが用意されているとのこと。こっちを使ってみるかな。
・ちょっと計測のときに使っているロジアナ用のコントロールソフトの原本はどうなっているのだろうとチェック。AcuteさんのTravelLogicなのだけど、流石に現行バージョンではないはず。すでに製造中止になったもの向けのソフトはあるのかなと思ったらちゃんと置いてあった。ダウンロードしてみたら最終更新が2021年。結構最近まで更新されていたんだな。
・ということでインストールして起動してみる。ちゃんと動くな。Helpでバージョンを見たらcopyrightの日付が2022年。そういえば、ユニバーサルプログラマの方もそうだったけど、面倒見が良い。
・さて、ロジアナも更新できたので、Pico SDKの方でI/Oしてみる。今度は早い。でも、最初のところが相変わらず600nsくらい食っている。最初だけ遅いのはなぜだろうと頭をひねっていて気がついた。Arduinoのloop()関数を繰り返し呼ぶときのオーバーヘッドだな。ということで、loop()の中で無限ループにしてみたら、良い感じ。GPIOからの入力に対して100〜170ns程度で応答できている。これなら4〜5MHz程度のクロックには応答できるか。