我做了一些研究,了解在执行其他繁重任务时访问 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