사용자 공간에서 GPIO 액세스가 느린 이유는 무엇입니까?

사용자 공간에서 GPIO 액세스가 느린 이유는 무엇입니까?

다른 무거운 작업을 수행하는 동안 GPIO에 액세스하는 기능에 대해 조사했습니다. 첫 번째 테스트에서는 libgpiod API를 사용하여 사용자 공간에서 GPIO 핀을 전환했습니다. 두 번째 테스트에서는 오실로스코프를 이용하여 주파수를 측정했습니다. 이론적으로 측정해야 할 주파수는 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를 사용하고 있습니다.

관련 정보