0

我对使用 usrp 设备非常陌生,并且正在尝试学习如何使用 C++ API 调整 E310 设备的接收器或发射器的中心频率,所以我有几个问题:

1)我在下面的代码中缺少什么

2)如何让我的脚本正确编译和运行。使用 cmake 还是 g++?(两种都试过了,对我不起作用。)甚至,我将如何编译从 github 存储库获得的示例,以确保我做对了。

我也尝试使用一些示例作为起点。

谢谢

#include <uhd/utils/safe_main.hpp>
#include <uhd/usrp/multi_usrp.hpp>
#include <boost/format.hpp>
#include <uhd/types/tune_request.hpp>
#include <iostream>
#include <csignal>
#include <cstdio>


int UHD_SAFE_MAIN()
{

double freq;

    printf("Enter RX frequency in Hz");
    scanf("%lf",&freq); 

//create a USRP
uhd::usrp::multi_usrp::sptr usrp;

//set the frequency
usrp->set_rx_freq(freq);

//Read the frequency
usrp->get_rx_freq();


    return 0;

}

当我使用 g++ -luhd Example.cpp -o test 编译时,我得到的错误信息是

/usr/lib/gcc/arm-oe-linux-gnueabi/4.8.2/../../../../arm-oe-linux-gnueabi/bin/ld: /usr/lib/gcc/ arm-oe-linux-gnueabi/4.8.2/../../../libuhd.so:未定义对符号“_ZN5boost6system15system_categoryEv”的引用//usr/lib/libboost_system.so.1.55.0:添加符号时出错:命令行 collect2 中缺少 DSO:错误:ld 返回 1 个退出状态。

我不确定这是否与语法或一些缺失的参数或其他我不理解的东西有关。

4

1 回答 1

0

如何让我的脚本正确编译和运行。使用 cmake 还是 g++?(两个都试过了,对我不起作用。)或者,我将如何编译从 github 存储库获得的示例,以确保我做对了。

CMake 和 g++ 是非常不同的东西。第一个用于生成构建脚本(所谓的 Makefile),第二个是编译器(通常从构建脚本中调用)。

您应该查看init_usrp 项目示例,从 README 开始,然后只需修改 init_usrp.cpp,直到您对基于 CMake 的项目构建感到宾至如归,您可以根据自己的需要调整项目。

作为一个额外的节点:你正在以艰难的方式做到这一点。E310 与任何非 E 系列 USRP 不同,它是一款嵌入式 linux 计算机,因此您需要为其编译软件并在 USRP 本身上运行它,而不是能够使用您的 PC。对于刚开始掌握构建系统的人来说,这真的很麻烦。如果我有更多时间,我会添加一些信息,说明您不应该在 E310 本身上构建软件,而是在您的 PC 上使用交叉编译器工具链构建软件,但这只会让事情变得更复杂。如果可以(例如,如果您的实验室碰巧有另一个),请使用任何其他 USRP;如果您实际上是在带屏幕的 PC 上工作,那么调试代码和信号处理会容易得多。

1)我在下面的代码中缺少什么

很难说。它看起来非常小,但对我来说还可以。你没有包括任何关于哪里出了问题的信息。我的意思是,可能你应该有一个#include <cstdio>在那里,因为你正在使用scanfand printf,但是因为你需要习惯 C++ 在嵌入式设备上开发具有 UHD 的信号处理软件,我认为这些微不足道的信息对你没有帮助很多。

于 2015-08-08T10:11:00.343 回答