如何在 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; 很少是个好主意。避开它。

这是否是这里的问题无法判断。

我通过以下步骤解决了这个问题。

  1. 在 gr-module/CMakeLists.txt 中,我在 'find gnuradio build dependencies' 部分添加了 'find_package(UHD)'。
  2. 在 gr-module/lib/CMakeLists.txt 中,我将目标 link 库命令更新为 'target_link_libraries(gnuradio-module gnuradio::gnuradio-runtime UHD::UHD)'.

经过运行 cmake 和 make 命令经过上述修改后,问题解决。