gpt4 book ai didi

python - Raspberry PI Python WiringPi 中断语法

转载 作者:太空狗 更新时间:2023-10-30 00:11:18 25 4
gpt4 key购买 nike

在 python 2.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,但据我从来源了解 https://github.com/Gadgetoid/WiringPi2-Python/blob/master/wiringpi_wrap.c你因为这段代码而得到这个错误(它检查函数是否返回 void 并显示错误):

int res = SWIG_ConvertFunctionPtr(obj2, (void**)(&arg3), SWIGTYPE_p_f_void__void);
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_ArgError(res), "in method '" "wiringPiISR" "', argument " "3"" of type '" "void (*)(void)""'");
}

因此,我建议在 my_int() 函数中显式返回 True 或 1。现在 python 为已到达函数代码末尾但未返回任何值的函数返回 None。

修改后的代码:

#!/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。详情请查看教程:http://raspi.tv/2013/how-to-use-wiringpi2-for-python-on-the-raspberry-pi-in-raspbian

关于python - Raspberry PI Python WiringPi 中断语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com