RaspberryPI Python WiringPi2中断语法

RaspberryPI Python WiringPi2中断语法,python,raspberry-pi,gpio,Python,Raspberry Pi,Gpio,在Python2.7/RaspberryPi上测试wiringPi2中断,似乎无法使其正常工作 使用以下代码,中断将生成分段错误 #!/usr/bin/env python2 import wiringpi2 import time def my_int(): print('Interrupt') wpi = wiringpi2.GPIO(wiringpi2.GPIO.WPI_MODE_PINS) wpi.pullUpDnControl(4,wpi.PUD_UP) wpi.wiri

在Python2.7/RaspberryPi上测试wiringPi2中断,似乎无法使其正常工作

使用以下代码,中断将生成分段错误

#!/usr/bin/env python2
import wiringpi2
import time

def my_int():
    print('Interrupt')

wpi = wiringpi2.GPIO(wiringpi2.GPIO.WPI_MODE_PINS)
wpi.pullUpDnControl(4,wpi.PUD_UP) 
wpi.wiringPiISR(4, wpi.INT_EDGE_BOTH, my_int())
while True:
    time.sleep(1)
    print('Waiting...')

Waiting...
Waiting...
Waiting...
Waiting...
Segmentation fault
如果我回调时没有使用“()”,则会出现另一个错误:

wpi.wiringPiISR(4, wpi.INT_EDGE_BOTH, my_int)

> TypeError: in method 'wiringPiISR', argument 3 of type 'void (*)(void)'

我做错了什么?

我对C不太在行,但据我从消息来源了解,由于这段代码,您出现了这个错误(它检查函数是否返回void并显示error):

因此,我建议在我的int()函数中显式返回
True
或1。现在,对于已经到达函数代码末尾但未返回任何值的函数,python将不返回任何值

修改代码:

#!/usr/bin/env python2
import wiringpi2
import time

def my_int():
    print('Interrupt')
    return True
# setup
wiringpi2.wiringPiSetupGpio()
# set up pin 4 as input
wiringpi2.pinMode(4, 0)
# enable pull up down for pin 4
wiringpi2.pullUpDnControl(4, 1) 
# attaching function to interrupt
wiringpi2.wiringPiISR(4, wiringpi2.INT_EDGE_BOTH, my_int)

while True:
    time.sleep(1)
    print('Waiting...')

编辑:您似乎错误地初始化了wiringpi2。请查看教程以了解详细信息:

您肯定需要在不使用
()
的情况下使用回调函数,否则您将调用函数并使用其函数的返回值作为回调函数的指针(
null
,因此为segfault),谢谢,但是如果我在不使用()然后我得到了TypeError-这是否表明wiringpi2模块在wiringPiISR()函数中有错误?非常感谢您的建议,我刚刚尝试了,但不幸的是它返回了相同的TypeError。谢谢,我使用基于类的方法进行wiringPi,它工作正常,我可以读/写端口,使用紧循环等方式捕获输入,唯一似乎不起作用的功能是中断,其他一切都按预期工作。啊,好的。因此,SWIG对象描述中可能存在错误。对不起,我无法测试。我看过你用git为wiringpi2做报告。让我们看看作者会回答什么。非常感谢您的尝试:-)
#!/usr/bin/env python2
import wiringpi2
import time

def my_int():
    print('Interrupt')
    return True
# setup
wiringpi2.wiringPiSetupGpio()
# set up pin 4 as input
wiringpi2.pinMode(4, 0)
# enable pull up down for pin 4
wiringpi2.pullUpDnControl(4, 1) 
# attaching function to interrupt
wiringpi2.wiringPiISR(4, wiringpi2.INT_EDGE_BOTH, my_int)

while True:
    time.sleep(1)
    print('Waiting...')