使用 USRP_UHD、SRI.xdelta 的 Redhawk SDR 无法正确更新
RedhawkSDR using USRP_UHD, SRI.xdelta doesnt update properly
我是 运行 CentOS 6.7 上的 Redhawk 1.10.1 和 N210,当我第一次分配和附加波形时 USRP_UHD 设备运行正常,但是当我释放它然后尝试分配第二个(或更多)时间设备始终显示 sri.xdelta = 1。这个问题使我的其他组件崩溃。这是设备中的错误还是我的电脑设置有误?
如果您是从 REDHAWK RPM 安装的,请获取 USRP_UHD 设备的源代码副本:
git 克隆 https://github.com/redhawksdr/USRP_UHD.git
现在编辑第 598 行(应该是 "fts.stream_id = 0.0;"),以便将 stream_id 设置为空字符串 ("") 而不是 0.0。然后你应该能够重建并安装这个编辑过的版本,问题就会得到解决。
这个引起problem的原因其实挺有意思的。虽然编译器不允许将字符串设置为 0,但将其设置为 0.0 似乎可以清除 std::string 的内部缓冲区,但不会影响字符串的先前长度。解除分配后,USRP_UHD 设备清除 SRI 信息。当执行新的分配时,设备检查 stream_id 是否为空,这表明它需要更新 SRI。因为对字符串的 empty() 调用会检查字符串的长度,所以设备假定 stream_id 不为空并推送默认 SRI。
我是 运行 CentOS 6.7 上的 Redhawk 1.10.1 和 N210,当我第一次分配和附加波形时 USRP_UHD 设备运行正常,但是当我释放它然后尝试分配第二个(或更多)时间设备始终显示 sri.xdelta = 1。这个问题使我的其他组件崩溃。这是设备中的错误还是我的电脑设置有误?
如果您是从 REDHAWK RPM 安装的,请获取 USRP_UHD 设备的源代码副本:
git 克隆 https://github.com/redhawksdr/USRP_UHD.git
现在编辑第 598 行(应该是 "fts.stream_id = 0.0;"),以便将 stream_id 设置为空字符串 ("") 而不是 0.0。然后你应该能够重建并安装这个编辑过的版本,问题就会得到解决。
这个引起problem的原因其实挺有意思的。虽然编译器不允许将字符串设置为 0,但将其设置为 0.0 似乎可以清除 std::string 的内部缓冲区,但不会影响字符串的先前长度。解除分配后,USRP_UHD 设备清除 SRI 信息。当执行新的分配时,设备检查 stream_id 是否为空,这表明它需要更新 SRI。因为对字符串的 empty() 调用会检查字符串的长度,所以设备假定 stream_id 不为空并推送默认 SRI。