[What]USRP UHD 新建设备框架

空模板的添加

假设我们的硬件构架为主机与设备通过USB通信,设备端分析协议并且底层的设备操作都是由设备端来完成的,主机仅仅需要发送命令即可,那么这种架构就是最简便的。

目前先以模拟一个不包含底层协议的设备为目标,实现设备操作流程的梳理。

添加基本文件

以 b200 系列为模板建立自己的设备:

  • 拷贝b200文件夹下所有文件,并将模板重命名为 dev_template
  • 仅仅保留 xxx_impl.cpp, xxx_impl.hpp, xxx_io_impl.cpp 文件,并去掉不需要的函数及内容。
  • 对应修改 CMAKE 脚本,将此模板加入编译列表。
  • 为了便于调试,打开所有的调试信息,并且编译路径设置在一个临时文件夹中。

注意: uhd库使用到了boost库,但不要使用boost最新的源码,这会导致构建失败。

#安装基本的依赖库
sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils cmake build-essential
#将构建生成的文件放在当前文件夹下, github/uhd/host 为源码路径
cmake -DCMAKE_INSTALL_PREFIX=./ /home/kc/github/uhd/host 
make 
make test
make install 
sudo ldconfig
  • 目前我们将库安装在一个测试文件夹中,所以需要设置环境变量 UHD_DIR 以指定库路径,否则 cmake 无法找到库的位置
  • 使用示例代码 host/examples/init_usrp 来测试模板文件是否已经成功添加进设备数组。
//在测试文件夹下新建测试应用代码文件夹
mkdir log 
cd log
cp -R ~/github/uhd/host/examples/init_usrp .
cd init_usrp/
mkdir build && cd build
#设置日志输出路径
export UHD_TEMP_PATH=~/test/uhd/log/
#输出所有调试信息
export UHD_LOG_LEVEL=1
#UHD库所在的路径
export UHD_DIR=~/test/uhd/
cmake ../
make 

接下来就是增加一些基本代码,然后不断测试此基本模板,此模板的代码位于 github

测试与调试

  • 终端调试信息输出

    终端的调试信息通过 host/include/uhd/utils/msg.hpp 中的 UHD_MSG 宏来输出

    /*!
    * A UHD message macro with configurable type.
    * Usage: UHD_MSG(warning) << "some warning message" << std::endl;
    */

    #define UHD_MSG(type)\
    uhd::msg::_msg(uhd::msg::type)()


    namespace uhd{ namespace msg{
    enum type_t{
    status = 's',
    warning = 'w',
    error = 'e',
    fastpath = 'f'
    };
    }
    }
  • 增加日志输出

    在路径 host/include/uhd/utils/log.hpp 中提供了 UHD_LOG 宏,可以输出当前的时间、文件、行数、功能等日志信息到文件中。

    UHD_LOGV(<log_level>) << "the log message" << std::endl;
    UHD_LOG << "the log message" << std::endl;

    在使用之前可以做以下设置:

    • 日志文件默认存在于 <temp-directory>/uhd.log 文件中,为了指定文件的位置,需要设置 UHD_TEMP_PATH 环境变量
    export UHD_TEMP_PATH=/home/kc/test/uhd/log
    • 日志输出级别变量 UHD_LOG_LEVEL 控制哪些日志能输出,只有小于或等于此级别的日志才会输出。
    #define UHD_LOGV(verbosity) \
    uhd::_log::log(uhd::_log::verbosity,__FILE__,__LINE__,BOOST_CURRENT_FUNCTION)


    #define UHD_LOG\
    UHD_LOGV(regularly)

    namespace uhd{namespace _log{
    //! verbosity levels for the logger
    enum verbosity_t{
    always = 1,
    often = 2,
    regularly = 3,
    rarely = 4,
    very_rarely = 5,
    never = 6
    };
    ....
    }
    ....
    }
    • 可以在预编译的时候设置默认的日志级别
    -DUHD_LOG_LEVEL=3
    • 也可以在运行时来动态的修改
    export UHD_LOG_LEVEL=3
Last Updated 2018-10-14 日 19:32.
Render by hexo-renderer-org with Emacs 26.1 (Org mode 9.1.14)