python gpio中断_阻止从Python读取GPIO:如何使用epoll()和选择.EPOLLET

博主在基于ARM核心的嵌入式系统上使用Buildroot Linux进行Python GPIO测试,尝试使用epoll在边缘触发模式下检测GPIO pin变化以避免轮询。在设置好GPIO方向和边缘触发后,发现Python代码中的epoll.poll()并未按预期阻塞,而是立即返回。问题可能在于代码实现或配置。已修正代码中误用的选择.poll()为epoll.poll(),但问题依然存在,poll()在每个迭代中不阻塞,导致无法正确检测上升沿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在一个嵌入式系统(armcore)上测试Python的GPIO访问,该系统运行的是用Buildroot(内核4.1.15)构建的linux。在

我希望我的代码阻止等待GPIO2上的pin更改(即,我不想通过反复调用“read”来轮询pin)。我尝试在边缘触发模式下使用“epoll”来执行此操作:

为了简单起见,我已经使用sysfs从控制台设置了GPIO pin:# cat /sys/class/gpio/gpio2/direction

in

# cat /sys/class/gpio/gpio2/edge

rising

下面是我的Python代码:

^{pr2}$

为了测试,我用信号发生器的方波为输入引脚供电,每周期2秒,这样我就能看到引脚的变化。在

当我在我的嵌入式系统上运行这个程序时,我得到:# python3 /usr/sbin/test-gpio-python.py

EPoll result: [(3, 10)]

FD: 3; Events: 10

-EPOLLPRI!

-EPOLLERR!

--> 0

代码在睡眠1秒时休眠,然后在下一次迭代中,poll()立即返回,并且不阻塞。它应该被阻止,因为我的输入每2秒只运行一个上升沿。在

为什么“poll()”没有阻止?

===编辑:===

最初,当我试图使用选择.EPOLLET“:OverflowError: can't convert negative value to unsigned int

然而,我发现我无意中使用了myPoll=选择投票()而不是epoll()。代码现已修复。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值