如何在 Gnu Radio 的自定义 OOT 模块中使用现有的 UHD 函数调用
How to use existing UHD function calls in a custom OOT module in Gnu Radio
我正在 GNU Radio 中制作一个名为 test3 的自定义 OOT 模块,它需要使用一些超高清功能。
比如我需要调用uhd::set_thread_priority_safe()函数,所以导入thread.hpp文件:
#include <uhd/utils/thread.hpp>
由于函数调用在uhd命名空间,所以我尝试使用命名空间来调用函数:
namespace gr {
namespace test3 {
using namespace uhd;
.
.
.
int get_time_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
uhd::set_thread_priority_safe();
return 0;
}
}
但是这样做不起作用,我收到以下错误:
AttributeError: module 'test3' has no attribute 'get_time'
但是当我删除 uhd 函数调用时,错误消失了。
我该如何解决这个问题?
不要使用using namespace uhd;
!您甚至没有使用那个导入的命名空间,所以它完全没有用,而且您可能会用 uhd
命名空间中的元素覆盖范围内的内容。正如您目前所做的那样,访问该命名空间中的元素只需在访问时指定命名空间即可,如 uhd::set_thread_priority_safe
.
经验法则:using namespace xyz;
很少是个好主意。避开它。
这是否是这里的问题无法判断。
我通过以下步骤解决了这个问题。
- 在 gr-module/CMakeLists.txt 中,我在 'find gnuradio build dependencies' 部分添加了 'find_package(UHD)'。
- 在 gr-module/lib/CMakeLists.txt 中,我将目标 link 库命令更新为 'target_link_libraries(gnuradio-module gnuradio::gnuradio-runtime UHD::UHD)'.
经过运行 cmake 和 make 命令经过上述修改后,问题解决。
我正在 GNU Radio 中制作一个名为 test3 的自定义 OOT 模块,它需要使用一些超高清功能。
比如我需要调用uhd::set_thread_priority_safe()函数,所以导入thread.hpp文件:
#include <uhd/utils/thread.hpp>
由于函数调用在uhd命名空间,所以我尝试使用命名空间来调用函数:
namespace gr {
namespace test3 {
using namespace uhd;
.
.
.
int get_time_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
uhd::set_thread_priority_safe();
return 0;
}
}
但是这样做不起作用,我收到以下错误:
AttributeError: module 'test3' has no attribute 'get_time'
但是当我删除 uhd 函数调用时,错误消失了。
我该如何解决这个问题?
不要使用using namespace uhd;
!您甚至没有使用那个导入的命名空间,所以它完全没有用,而且您可能会用 uhd
命名空间中的元素覆盖范围内的内容。正如您目前所做的那样,访问该命名空间中的元素只需在访问时指定命名空间即可,如 uhd::set_thread_priority_safe
.
经验法则:using namespace xyz;
很少是个好主意。避开它。
这是否是这里的问题无法判断。
我通过以下步骤解决了这个问题。
- 在 gr-module/CMakeLists.txt 中,我在 'find gnuradio build dependencies' 部分添加了 'find_package(UHD)'。
- 在 gr-module/lib/CMakeLists.txt 中,我将目标 link 库命令更新为 'target_link_libraries(gnuradio-module gnuradio::gnuradio-runtime UHD::UHD)'.
经过运行 cmake 和 make 命令经过上述修改后,问题解决。