我对使用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。所以:未定义的引用符号'_ZN5boost6system15system_categoryEv'//usr/lib/libboostrongystem.so.1.55.0:添加符号错误:DSO缺失从命令行collect2: error: ld returned 1 exit status.
我不确定这是关于语法还是一些缺失的参数或其他我还不理解的东西。
我如何得到我的脚本编译和正常运行。使用cmake还是g++?(两种都试过,但都不适合我。)或者,我如何编译从github存储库中获得的示例,只是为了确保我做得正确。
CMake和g++是非常不同的东西。第一个用于生成构建脚本(所谓的Makefile),第二个是编译器(通常从构建脚本调用)。
您应该看一下init_usrp项目示例,从README开始,然后修改init_usrp.cpp,直到您对基于cmake的项目构建感到足够熟悉,从而可以根据自己的需要调整项目。
作为一个额外的节点:您正在以硬方式执行此操作。与任何非e系列USRP不同,E310是嵌入式linux计算机,因此您需要为其编译软件并在USRP本身上运行它,而不是能够使用您的PC。对于刚开始掌握构建系统的人来说,这真的很麻烦。如果我有更多的时间,我会添加一些信息,说明您不应该在E310本身上构建软件,而是在您的PC上使用交叉编译器工具链,但这只会使事情变得更加复杂。如果可以(例如,如果您的实验室碰巧有另一个USRP),请使用任何其他USRP;如果你在有屏幕的PC上工作,那么调试代码和信号处理就容易多了。
1)在
下面的代码中我遗漏了什么
很难说。它看起来非常小,但对我来说还可以。你没有包括任何关于哪里出错的信息。我的意思是,可能你应该有一个#include <cstdio>
在那里,因为你正在使用scanf
和printf
,但因为你需要习惯c++无论如何在嵌入式设备上开发超高清信号处理软件,我不认为这些琐碎的信息对你有多大帮助。