首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过UHD寻址多个B200设备

通过UHD寻址多个B200设备
EN

Stack Overflow用户
提问于 2017-03-21 19:08:15
回答 1查看 1K关注 0票数 0

我使用USRP最新版本和Python3.6作为编程环境,在Windows 10系统上有2台B210收音机在USB3上。我可以“某种程度上”在单独的进程中同时运行它们,但是我想知道是否可以在一个线程中运行它们?多么?

如果能让事情变得更简单的话,我很高兴搬到Linux,我只是更熟悉Windows。

2“有点”=我有时会得到错误,这可能是两个进程在堆栈的某个地方发生冲突。

下面的代码说明了争用条件,有时一个或两个进程出现错误代码40 (UHD_ERROR_ASSERTION)或偶尔出现代码11 ( UHD_ERROR_KEY )失败。

代码语言:javascript
复制
from ctypes import (windll, byref, c_void_p, c_char_p)
from multiprocessing import Process, current_process

def pread(argstring):
    # get handle for device
    usrp = c_void_p(0)  
    uhdapi = windll.uhd
    p_str=c_char_p(argstring.encode("UTF8"))
    errNo = uhdapi.uhd_usrp_make(byref(usrp),p_str) 
    if errNo != 0: 
        print("\r*****************************************************************")
        print("ERROR: ",errNo," IN: ",  current_process())
        print("=================================================================")
    if usrp.value != 0:
        uhdapi.uhd_usrp_free(byref(usrp))
    return

if __name__ == '__main__':
    while True:
        p2 = Process(target=pread, args=("",))
        p1 = Process(target=pread, args=("",))
        p1.start()
        p2.start()
        p1.join()
        p2.join()
        print("end")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 19:32:31

是的,您可以有多个multi_usrp句柄。

顺便说一句,注意UHD本质上是C++,而C只是一个包装器。它是为生成脚本接口而设计的,比如您正在使用的Python (不知道Python和您正在使用的C之间的哪个接口--是自写的吗?)。

虽然有可能,但是没有充分的理由从同一个线程调用recvsend函数--大多数现代机器都是多线程的,您应该利用这一点。实时SDR是一个CPU密集型任务,您应该使用所有可用的CPU资源来获取与驱动程序之间的数据,以避免缓冲区溢出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42936122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档