![为什么我从用户空间访问 GPIO 的速度较慢?](https://linux22.com/image/152723/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BB%8E%E7%94%A8%E6%88%B7%E7%A9%BA%E9%97%B4%E8%AE%BF%E9%97%AE%20GPIO%20%E7%9A%84%E9%80%9F%E5%BA%A6%E8%BE%83%E6%85%A2%EF%BC%9F.png)
我做了一些研究,了解在执行其他繁重任务时访问 GPIO 的能力如何。在第一次测试中,我使用 libgpiod API 从用户空间切换了 GPIO 引脚。在第二次测试中,我使用 .我用示波器测量了频率。理论上我应该测量的频率是31.25Hz。但只有当从内核空间切换引脚时我才会得到这个值。从用户空间我几乎只得到一半的价值。
因此,我的解释是,从用户空间来看,我的代码和引脚之间有更多的软件层,这会延迟我的信号。
所以我的问题是:我说得对吗?还有其他因素可能会影响它吗?是否有一些文档(手册页等)或类似的内容可以证实我的假设?
我在用户空间中使用一个简单的 shell 脚本
while true; do
gpioset GPIOE 12=1
sleep 0.016
gpioset GPIOE 12=0
sleep 0.016
done
编辑:我在 STM32MP157c-dk2 板上使用内核版本为 4.19 的 openSTLinux