ユーザー空間でGPIOアクセスが遅いのはなぜですか?

ユーザー空間でGPIOアクセスが遅いのはなぜですか?

他の重い作業を行っている間にGPIOにアクセスする機能を調べました。最初のテストでは、libgpiod APIを使用してユーザー空間でGPIOピンを切り替えました。 2回目のテストでは、オシロスコープを使用して周波数を測定しました。理論的に測定すべき周波数は31.25Hzです。ただし、カーネル空間でピンを切り替える場合にのみこの値を取得します。ユーザー空間では、値のほぼ半分しか得られません。

したがって、私の説明は、ユーザー空間で私のコードと信号を遅らせるピンの間により多くのソフトウェア層があるということです。

だから私の質問は:私は正しいですか?影響を与える可能性がある他の要因がありますか?私の仮定を確認できる文書(manページなど)やこれに似たものはありますか?

ユーザー空間で単純なシェルスクリプトを使用しています。

while true; do
  gpioset GPIOE 12=1
  sleep 0.016
  gpioset GPIOE 12=0
  sleep 0.016
done

編集:STM32MP157c-dk2ボードでカーネルバージョン4.19でopenSTLinuxを使用しています。

ベストアンサー1

おすすめ記事