首页 > 解决方案 > 如何使用 pyusb 正确调用 libusb_exit()

问题描述

我一直在尝试使用 pyusb 与董事会沟通,并且最近发生了一个有趣的问题。每天早上(所以当我超过 12 小时没有使用该板时),它与它的通信有问题。我通过使用 Cygwin 运行基于 Linux 的应用程序找到了一种解决方法。

每当我运行该应用程序时,它都会解决我在一天中遇到的通信问题。翻阅了Linux程序的github代码后,我推测当程序调用libusb_exit()方法时,问题就解决了。

我的问题是我不确定如何在我的代码中正确调用 libusb_exit() 。目前我尝试这样称呼它:

self._backend = usb.backend.libusb1.get_backend(find_library=lambda q: "libusb-1.0.dll")
self._backend.lib.libusb_exit(self._backend.ctx)

我知道这不应该是调用它的方式,因为当我这样做时,每当我在这样做之后尝试与董事会沟通时,我都会得到一个 OSError:

OSError: exception: access violation writing 0x00007FFCDBF41CD0

随后是另一个尝试调用 libusb_exit() 并失败的回溯:

line 642, in _exitfunc
    f()
line 566, in __call__
    return info.func(*info.args, **(info.kwargs or {}))
line 106, in _do_finalize_object_ref
    obj._do_finalize_object()
line 73, in _do_finalize_object
    self._finalize_object()
line 722, in _finalize_object
    self.lib.libusb_exit(self.ctx)

OSError: exception: access violation writing 0x0000000000000000

我认为这是 libusb 内置的 ctypes 的一个问题。

如果有人对我如何更改代码来解决这个问题有任何见解,将不胜感激。

干杯

标签: pythonusbctypeslibusbpyusb

解决方案


推荐阅读