GNU Radio3.8创建OOT的详细过程(进阶/C++)

2023-05-16

GNU Radio 学习使用 OOT 系列教程:

GNU Radio3.8创建OOT的详细过程(基础/C++)

GNU Radio3.8创建OOT的详细过程(进阶/C++)

GNU Radio3.8创建OOT的详细过程(python)

GNU Radio自定义模块:Embedded Python Block的使用

GNU Radio3.8:编辑yaml文件的方法

GNU Radio3.8:创建自定义的QPSK块(C++)

----------------------------------------------------------------------------------------

目录

一、sync block 的创建

二、一些其他类型的块

1、Sources 和 Sinks

2、Hierarchical blocks

3、Decimation Block

4、Interpolation Block


在上篇文章《GNU 3.8创建OOT的详细过程(基础/C++) 》我们创建了一个 general 类型的 block ,文章的结尾我们提到,对于输入输出数据比固定为 1:1 的情况下,我们可以对 “general” 类型的 block 的代码进行进行简化,这样就引出了本文要讲的 sync 类型的 block 。

对于输入输出数据比固定为 1:1 时还有一种特殊情况:即我们需要用到 N 个数据来生成一个输出,但是这 N 个数据中前 N-1 个数据为历史记录的数据,只有第 N 个数据为当前的新数据(类似滑动窗口中每滑动一步就会记载一个新的数据并丢掉一个最旧的数据,注意其与插值 1:N 数据比以及抽取操作 N:1 数据比的区别)。对于前 N-1 个数据来说,这在 GR 中是一种叫做 “history” 的概念,这时就需要在构造函数中或在需求发生变化时调用 set_history()。例如,对于非抽取、非插值的 FIR 滤波器来说,需要检查它产生的每个输出样本的 N 个输入样本,其中 N 是滤波器中的抽头数。但是,它每次只消耗1个输入样本来产生1个输出。

官方对 generalsync 的解释为:

GeneralThis block a generic version of all blocks
SyncThe sync block allows users to write blocks that consume and produce an equal number of items per port. From the user perspective, the GNU Radio scheduler synchronizes the input and output items, it has nothing to with synchronization algorithms

一、sync block 的创建

sync block 的创建过程与 general block 的创建方法类似。我们还在 之前创建的 mymod 模块 的基础上 添加一个名为 square2_ff 的 sync block,作用与之前的 square1_ff 一样。命令为:gr_modtool add -t sync -l cpp square2_ff

wsx@wsx:~/temp/gr-mymod$ gr_modtool add -t sync -l cpp square2_ff
GNU Radio module name identified: mymod
Language: C++
Block/code identifier: square2_ff
Please specify the copyright holder: 
Enter valid argument list, including default arguments: 
Add Python QA code? [Y/n] y
Add C++ QA code? [y/N] n
Adding file 'lib/square2_ff_impl.h'...
Adding file 'lib/square2_ff_impl.cc'...
Adding file 'include/mymod/square2_ff.h'...
Editing swig/mymod_swig.i...
Adding file 'python/qa_square2_ff.py'...
Editing python/CMakeLists.txt...
Adding file 'grc/mymod_square2_ff.block.yml'...
Editing grc/CMakeLists.txt...

同样的,仍然使用 python 测试文件,命令参数及最终生成的文件等内容在 上一篇文章 中已详细介绍,这里就不在赘述啦~

下面是测试代码 python/qa_square2_ff.py 的编写:

# python/qa_square2_ff.py
from gnuradio import gr, gr_unittest
from gnuradio import blocks
import mymod_swig as mymod

class qa_square2_ff(gr_unittest.TestCase):

    def setUp(self):
        self.tb = gr.top_block()

    def tearDown(self):
        self.tb = None

    def test_001_square2_ff(self):
        src_data = (-3, 4, -5.5, 2, 3)
        expected_result = (9, 16, 30.25, 4, 9)
        src = blocks.vector_source_f(src_data)
        sqr = mymod.square2_ff()
        dst = blocks.vector_sink_f()
        self.tb.connect(src, sqr, dst)
        self.tb.run()
        result_data = dst.data()
        self.assertFloatTuplesAlmostEqual(expected_result, result_data, 6)
        # check data

if __name__ == '__main__':
    gr_unittest.run(qa_square2_ff)

然后是 lib/square2_ff_impl.cc 代码的填写:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <gnuradio/io_signature.h>
#include "square2_ff_impl.h"

namespace gr {
  namespace mymod {

    square2_ff::sptr
    square2_ff::make()
    {
      return gnuradio::get_initial_sptr
        (new square2_ff_impl());
    }

    /* 构造函数 */
    square2_ff_impl::square2_ff_impl()
      : gr::sync_block("square2_ff",
                  gr::io_signature::make(1, 1, sizeof (float)), // input signature
                  gr::io_signature::make(1, 1, sizeof (float))) // output signature
    {}

    /* 析构函数 */
    square2_ff_impl::~square2_ff_impl()
    { }

    // work()是执行实际信号处理任务的函数
    int
    square2_ff_impl::work(int noutput_items,
        gr_vector_const_void_star &input_items,
        gr_vector_void_star &output_items)
    {
      const float *in = (const float *) input_items[0];
      float *out = (float *) output_items[0];

      for(int i = 0; i < noutput_items; i++) {
        out[i] = in[i] * in[i];
      }

      // Tell runtime system how many output items we produced.
      return noutput_items;
    }

  } /* namespace mymod */
} /* namespace gr */

上述代码中,测试文件的编写没啥区别,区别主要是在 square2_ff_impl.cc 代码中。可以发现,新的代码中的代码量少了不少,信号处理主函数由 work() 取代了 general_work() ,并且省略了 ninput_items 参数,同时 consume_each() 以及 forecast() 函数也不见了。如果 block 需要大于 1 个 history,则需要在构造函数中或在需求发生变化时调用 set_history()。

这里 forecast 函数虽然没显式调用,但在代码中会隐式实现,系统会默认为1:1的关系。consume_each 函数也是如此。

之后对 square2_ff 进行编译安装。由于之前添加 square2_ff 时 gr_modtool 已自动修改 CMakeList 文件,这里在 build/ 文件夹中可以直接 make,系统会自动重新 cmake 然后再make:

wsx@wsx:~/temp/gr-mymod/build$ make -j10
-- Build type not specified: defaulting to release.
-- Using GMP.
-- User set python executable /usr/bin/python3
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.8.so (found suitable exact version "3.8.10") 
-- Using install prefix: /usr/local
-- Building for version: v1.0-compat-xxx-xunknown / 1.0.0git
-- No C++ unit tests... skipping
-- 
-- Checking for module SWIG
-- Found SWIG version 4.0.1.
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.8.so (found version "3.8.10") 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wsx/temp/gr-mymod/build
[ 20%] Built target pygen_apps_9a6dd
[ 33%] Built target doxygen_target
[ 33%] Built target _mymod_swig_doc_tag
[ 33%] Built target pygen_python_6451a
Scanning dependencies of target gnuradio-mymod
[ 46%] Built target mymod_swig_swig_doc
Scanning dependencies of target mymod_swig_swig_compilation
[ 60%] Building CXX object lib/CMakeFiles/gnuradio-mymod.dir/square2_ff_impl.cc.o
[ 60%] Swig source mymod_swig.i
[ 60%] Built target mymod_swig_swig_compilation
[ 66%] Linking CXX shared library libgnuradio-mymod.so
[ 73%] Built target gnuradio-mymod
Scanning dependencies of target mymod_swig
[ 80%] Building CXX object swig/CMakeFiles/mymod_swig.dir/CMakeFiles/mymod_swig.dir/mymod_swigPYTHON_wrap.cxx.o
[ 86%] Linking CXX shared module _mymod_swig.so
[ 86%] Built target mymod_swig
[100%] Generating mymod_swig.pyo
[100%] Generating mymod_swig.pyc
[100%] Built target pygen_swig_1e481

之后又是 make test 。。。emmmmm,你可以先 make test 一下试试,如果能通过,当我下面的 BUG 部分啥也没说哈——如果没通过,而且运行 ctest -V -R square 报错的话,那就继续看下面这部分:

============================== BUG ===============================

报错大概是这样的:ImportError: ×××: undefined symbol ×××

ImportError: /path/to/build/swig/_mymod_swig.so: undefined symbol: _ZN2gr5mymod10square2_ff4makeEv

这就遇到一个很神奇的现象,但是并不影响最终的使用,情况是这样的:

情况1:在本例中,我们是继续 这篇文章 的步骤,在 mymod 模块中添加了第二个 block:square2_ff,这时的情况就是之前那个 block:square1_ff 已经编译过一次,我们是在这样一个基础上再对又添加一个 block 后的两个 block 进行编译。这种情况下,在我进行编译测试的过程中,如果 make 之后紧接着就是 make test 的话,就会出现上面提到的这个问题,这时我找遍了 google 的资源,找到了几个遇到过相似问题的解决方法:

python - gnuradio `ImportError undefined symbol` - Stack Overflow

FAQ - GNU Radio

但是,这种解决方式大致的意思就是说cmakelist文件中没有加入跟 square2_ff 有关的库并需要我们手动加入,emmmmm我照做了,但是没啥用(好吧,我承认是我没太看懂这上面大佬的解决方法说的是个啥。。。),但是直觉告诉我 test 没通过可能也不影响后面的使用,之后我就没管这个这个 test 的问题直接进行 gr_modtool makeyaml square2_ff,然后 sudo make install,然后!我发现 test 没通过确实对结果没影响,square1_ff 和 square2_ff 都能在GRC中使用了!后来在回到 build 文件中运行 make test ,它通过了。。。OK,完成,总结就是:

最好在 sudo make install 之后在运行 make test 。

 情况2:在情况1的基础上,我猜测可能是先对 square1_ff 进行编译 的结果影响了后面再加入 的 square2_ff ,因此就尝试删了之前安装好的 block 及 mymod 工程,重新建一个一模一样的,依次完成加入square1_ff / square2_ff 和 相应的 python test 文件等步骤,然后一起一次性完成编译,这时我在 make 命令之后紧接着运行 make test 指令,他真的通过了!

wsx@wsx:~/temp/gr-mymod/build$ make -j10
Scanning dependencies of target pygen_python_6451a
Scanning dependencies of target pygen_apps_9a6dd
Scanning dependencies of target doxygen_target
Scanning dependencies of target _mymod_swig_doc_tag
Scanning dependencies of target gnuradio-mymod
[ 13%] Built target pygen_apps_9a6dd
[ 20%] Generating documentation with doxygen
[ 20%] Generating __init__.pyc
[ 20%] Generating __init__.pyo
[ 26%] Building CXX object swig/CMakeFiles/_mymod_swig_doc_tag.dir/_mymod_swig_doc_tag.cpp.o
[ 33%] Building CXX object lib/CMakeFiles/gnuradio-mymod.dir/square2_ff_impl.cc.o
[ 40%] Building CXX object lib/CMakeFiles/gnuradio-mymod.dir/square1_ff_impl.cc.o
warning: Tag 'PERL_PATH' at line 1686 of file '/home/wsx/temp/gr-mymod/build/docs/doxygen/Doxyfile' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
warning: Tag 'MSCGEN_PATH' at line 1707 of file '/home/wsx/temp/gr-mymod/build/docs/doxygen/Doxyfile' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
[ 40%] Built target pygen_python_6451a
[ 40%] Built target doxygen_target
[ 46%] Linking CXX executable _mymod_swig_doc_tag
[ 46%] Built target _mymod_swig_doc_tag
Scanning dependencies of target mymod_swig_swig_doc
[ 53%] Generating doxygen xml for mymod_swig_doc docs
warning: Tag 'PERL_PATH' at line 1654 of file '/home/wsx/temp/gr-mymod/build/swig/mymod_swig_doc_swig_docs/Doxyfile' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
warning: Tag 'MSCGEN_PATH' at line 1675 of file '/home/wsx/temp/gr-mymod/build/swig/mymod_swig_doc_swig_docs/Doxyfile' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
[ 60%] Generating python docstrings for mymod_swig_doc
[ 60%] Built target mymod_swig_swig_doc
Scanning dependencies of target mymod_swig_swig_compilation
[ 66%] Swig source mymod_swig.i
[ 66%] Built target mymod_swig_swig_compilation
[ 73%] Linking CXX shared library libgnuradio-mymod.so
[ 73%] Built target gnuradio-mymod
Scanning dependencies of target mymod_swig
[ 80%] Building CXX object swig/CMakeFiles/mymod_swig.dir/CMakeFiles/mymod_swig.dir/mymod_swigPYTHON_wrap.cxx.o
[ 86%] Linking CXX shared module _mymod_swig.so
[ 86%] Built target mymod_swig
Scanning dependencies of target pygen_swig_1e481
[100%] Generating mymod_swig.pyo
[100%] Generating mymod_swig.pyc
[100%] Built target pygen_swig_1e481
wsx@wsx:~/temp/gr-mymod/build$ make test
Running tests...
Test project /home/wsx/temp/gr-mymod/build
    Start 1: qa_square1_ff
1/2 Test #1: qa_square1_ff ....................   Passed   17.04 sec
    Start 2: qa_square2_ff
2/2 Test #2: qa_square2_ff ....................   Passed    0.73 sec

100% tests passed, 0 tests failed out of 2

Total Test time (real) =  18.10 sec

情况就是这么个情况,玄乎。。好了,问题解决了,我们继续讲后面的

============================== END ===============================

下面是安装完成之后的效果:

 运行的结果如下:

二、一些其他类型的块

1、Sources 和 Sinks

Sources 和 Sinks 都是 gr:sync_block 的派生类。唯一不同的是 sources 没有输入端口。sinks没有输出端口,这些由 gr::io_signature::make 控制。可以在源码文件中查看一些例子:

gr-blocks / lib / file_source_impl.cc、file_source.{h,cc}、file_sink_impl.{h,cc} 

2、Hierarchical blocks

Hierarchical(分层) blocks 是由其他 blocks 组成的一种 block,它可以实例化其他 blocks 或者 hierarchical blocks 并将他们连接起来,为了达到这个目的,hierarchical block 内部有一个“connect” 函数可供调用。hierarchical block 可以像普通 block 一样定义输入输出流。

把一个输入 i 连接到一个 hierarchical block 的python 代码:

self.connect((self, <i>), <block>)

类似地,要将信号从输出流 o 上的块发送出去的代码:

self.connect(<block>, (self, <o>))

与创建 sync 及 general 的方法一样,使用 gr_modtool 创建 hierarchical block 的命令如下:

gr_modtool.py add -t hier -l cpp hierblockcpp_ff

3、Decimation Block

decimation(抽取) block 是另一种类型的固定速率块(N : 1),其中输入项的数量是输出项数量的固定倍数。一个  decimation block 的 C++ 例子如下:

#include <gr_sync_decimator.h>

class my_decim_block : public gr_sync_decimator
{
public:
  my_decim_block(...):
    gr_sync_decimator("my decim block", 
                      in_sig,
                      out_sig,
                      decimation)
  {
    //constructor stuff
  }

  //work function here...
};

gr_sync_decimator 构造函数的第四个参数 decimation 为抽取因子。另外,不难理解,输入项目的数量 = noutput_items * decimation

4、Interpolation Block

与decimation block 作用相反,interpolation(插值) block 是另一种固定速率块(1 : N),其中输出项的数量是输入项数量的固定倍数。C++例子如下。

#include <gr_sync_interpolator.h>

class my_interp_block : public gr_sync_interpolator
{
public:
  my_interp_block(...):
    gr_sync_interpolator("my interp block", 
                         in_sig,
                         out_sig,
                         interpolation)
  {
    //constructor stuff
  }

  //work function here...
};

参考网站:

OutOfTreeModules - GNU Radio

BlocksCodingGuide - GNU Radio

GNU Radio Manual and C++ API Reference: gr::block Class Reference

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GNU Radio3.8创建OOT的详细过程(进阶/C++) 的相关文章

  • 将 GNU 大小写范围扩展转换为标准 C

    GNU 大小写范围扩展允许 switch 语句中的大小写范围 switch value case 1 8 printf Hello 1 to 8 n break default printf Hello default n break 如何
  • ImageMagick 转换和 GNU 并行在一起

    我想加快以下命令的速度 convert limit memory 64 limit map 128 antialias delay 1x2 final png movie mp4 我见过其他的博客文章其中并行和转换一起使用 所以我想知道如何
  • GNU C 中的 __attribute__((const)) 与 __attribute__((pure))

    有什么区别 attribute const and attribute pure 在 GNU C 中 attribute const int f return 4 vs attribute pure int f return 4 来自ARM
  • Linux 在编译时随机删除了我的文件,我该怎么办?

    gcc L root Desktop Wall o prog3 c pthread lcopy usr lib gcc x86 64 linux gnu 7 x86 64 linux gnu Scrt1 0 In function star
  • include_next 预处理器指令导致 MSVC 中出现问题

    我知道 inlcude next 恰好是 C 预处理器的 GNU 扩展 我在使用 MSVC 编译 Gnu 库代码时遇到问题 例如 有一个 stdio h 头文件或者更确切地说GNU like
  • 当不存在符号信息时,如何使用 GDB 为 x86 程序集设置断点? [复制]

    这个问题在这里已经有答案了 当没有符号信息时 即无法编写时 如何使用 GDB 对 x86 汇编代码设置断点b start 我想立即停止执行 但是写b 0不是很有用 因为这会在地址处停止执行0 但我需要在地址处中断执行x相对于起点 当不存在符
  • 在 GNU 汇编器中处理或记住 cmp 的向后参数的好方法是什么?

    以下是一些采用 Intel 语法的汇编代码 Jump to done if rsi gt rax cmp rsi rax jae done 这对我的大脑来说是有道理的 如果 rsi 高于或等于 rax 你就会跳 匹配中参数的顺序cmp操作说
  • GNU emacs 相当于 func-menu

    GNU emacs 是否有等效的 func menu 当我可以访问 xemacs 时 我使用了 func menu 并且与 speedbar 或 sr speedbar 相比 我更喜欢它的行为 具体来说 我喜欢只显示当前文件的功能 功能列表
  • 如何从点文件内向 gnuplot 中的每个点添加颜色

    Reading this https stackoverflow com questions 12427704 vary point color based on column value for multiple data blocks
  • 如何让配置脚本检查依赖关系

    我使用 autoconf 生成了一个配置脚本来构建我的项目 除非我没有安装一些所需的库 否则它工作正常 当缺少某些文件时 Make 返回错误 但我认为应该由配置脚本实际检查它 所以我的问题是 如何修改 autoconf 生成的脚本来寻找依赖
  • 使用 gdb 中的函数调用堆栈进行导航

    在 Visual Studio 中 如果单击调用堆栈中的某个条目 则会打开编辑器并显示该函数的源代码 gdb 中可能有类似的东西吗 我在 gdb 中使用 tui 文本用户界面 是否可以让 tui 显示回溯中给定条目的源代码 如果没有 那么如
  • 为什么我的 Mac (OS X 10.7.3) 有旧版本 (2.3) 的 Gnu Bison?

    我的 mac 上的 GNU Bison 版本是 2 3 但我知道 Bison 2 5 很久以前就发布了 这本书弗莱克斯和野牛使用2 5版本 我应该自己升级到2 5吗 有必要吗 2 3和2 5有什么区别 我在 MacOSX 10 9 5 上遇
  • C/C++、FORTRAN、下划线和 GNU Autotools

    我有关于混合语言编程 C C 和 FORTRAN 的问题 使用 gcc 和 gfortran 我搜索了很多 将 fortran 与 语言 X 并且无法解决这个问题 我不确定这是链接问题还是编译器问题 或者两者兼而有之 我创建了三个文件 并使
  • GNU 汇编器:访问损坏的共享库错误

    我正在读一本书 专业汇编语言 我想用动态链接 我正在使用 AT T 语法和 GNU 汇编器 我的电脑有 Ubuntu 12 04 64 位系统 我正在尝试使用 cpuid 汇编器操作码显示供应商 ID 字符串 并且printf C函数代替l
  • 将 gcc libs .data 放在特定部分?

    我正在尝试为我们的嵌入式系统切换到 GNU GCC 编译器 但由于我们芯片的内存布局被分割 我在链接该项目时遇到了问题 RAM section 1 0x10000 0x12FFF RAM section 2 0x18000 0x1BFFF
  • 让 GNU C 编译器在 iOS 6.x 上运行

    我有一台越狱 evasi0n 第四代 iPad 带有 iOS 6 1 固件 通过 Cydia 我安装了移动终端 版本 520 2 然后 遵循this http iklive org cc compiling on ios 教程中 我已经下载
  • Gnu 时间和格式化输出

    我想使用 gnu time 来测量一些小 c 程序的运行时间 人 中写道 f FORMAT format FORMAT Use FORMAT as the format string that controls the output of
  • 在 GDB 中显示结构体值

    在 GDB 中 给定一个指向结构体的变量 print将显示原始指针值并x将显示指向的原始字节 有什么方法可以显示指向该结构的数据 即字段及其值的列表 print variable 如果这样做 它将在 GDB 中显示该变量的值 您还可以选择显
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • 如何调用使用 Define 创建的 GNU make 宏?

    在我的 Makefile 中调用 GREP 的两种方式有什么区别吗 我有什么理由应该使用其中之一 两者似乎产生相同的结果 define GREP word 3 shell echo define FOO 0xfff00100 endef a

随机推荐

  • ubuntu安装kvm

    kvm是linux下的虚拟机 文章目录 一 电脑硬件支持二 安装ubuntu三 安装kvm 一 电脑硬件支持 首先不用多说啦 xff0c 既然是虚拟机 xff0c 当然要自己的机器支持虚拟技术 xff0c 重启机器进入biso xff0c
  • 类的静态(static)成员

    有时候类需要它的一些成员与类本身直接相关 xff0c 而不是与类的各个对象保持关联 xff08 这意味着无论创建多少个类的对象 xff0c 静态成员都只有一个副本 xff09 我们通过在成员的声明前加上关键字static使得其与类关联在一起
  • Keil uvision5 介绍

    keil 5 Keil uvision5 安装过程Keil uvision5安装包1 Keil uvision5 介绍2 Keil uVision5 特点3 Keil uVision5 功能4 Keil uVision5 快捷键 Keil
  • px4仿真时,/mavros/state现实连接不上

    仿真时 xff0c 使用px4 xff0c 启动 PX4 Firmware launch文件中的launch文件 进入gazebo世界中 xff0c 通过 xff1a rostopic list 查看发布的话题 xff0c 并且打印 mav
  • 插值方法(一维插值、三次样条插值、二维插值的matlab自带函数,python实现/作图)

    数模比赛中 xff0c 常常需要根据已知的函数点进行数据 模型的处理和分析 xff0c 而有时候现有的数据是极少的 xff0c 不足以支撑分析的进行 xff0c 这时就需要使用一些数学的方法 xff0c 模拟产生 一些新的单又比较靠谱的值来
  • ROS中常用命令

    1 xff09 工作空间初始化 xff1a catkin init workspace 2 xff09 创建功能包 xff1a catkin create pkg pkg name reply 3 xff09 编译工作空间中的功能包 xff
  • 【DL】CNN的前向传播和反向传播(python手动实现)

    卷积层的前向传播和反向传播 说明 本文中 xff0c 只实现一层卷积层的正反向传播 xff08 带激活函数Relu xff09 xff0c 实现的是多通道输入 xff0c 多通道输出的 之前对深度学习的理解大多止于pytorch里面现成的A
  • Postman使用教程详解

    目录 1 Postman安装与接口请求基本操作1 1Postman安装1 2发起一个接口请求的小测试 2 接口测试实战2 1百度IP查询接口从抓包到测试实战2 2需要设置头域的请求实战2 3文件上传与json请求实战 3 Newman命令行
  • GNU Radio3.8创建OOT的详细过程(基础/C++)

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • Johnson-Trotter(JT)算法生成排列

    对于生成 xff5b 1 xff0c xff0c n xff5d 的所有n xff01 个排列的问题 xff0c 我们可以利用减治法 xff0c 该问题的规模减一就是要生成所有 xff08 n 1 xff09 xff01 个排列 假设这个小
  • OSMWebWizard无法使用(Address family not supported by protocol)

    根据报错信息依次打开osmWebWizard py SimpleWebSocketServer py 查看对应行号的内容 xff0c 发现Simple py中有一个socket net6 可能是网络协议的问题 xff0c 查了一下 xff0
  • 粤嵌实训笔记二

    目录 20230227 20230303 xff08 第二周 xff09 main clcd clcd hbmp cbmp hgame cgame h 20230227 20230303 xff08 第二周 xff09 1 在Linux下
  • Arduino学习笔记:FreeRTOS——ESP32多任务处理

    Arduino学习笔记 xff1a FreeRTOS ESP32多任务处理 Demo span class token comment 创建任务一和任务二的句柄 xff0c 并初始化 span TaskHandle t TASK Handl
  • JAVA-信号量

    信号量 xff1a 信号量一般都有以下几个变量 xff1a count xff1a 记录可以使用的资源数wait list xff1a 等待信号量的队列 获取信号量需要判断count是否大于零 xff0c 即if count gt 0 若c
  • (程序猿专属)1024-我用代码写成浪漫情话表白你

    今天1024 xff0c 程序员节 xff01 不祝你们节日快乐了 xff0c 祝你们穿着拖鞋和裤衩去相亲吧 xff01 祝你们和甜蜜的爱情撞个满怀 xff01 一 我是你的什么啊 xff1f 你是我的bug啊 因为 xff0c 我每时每刻
  • C++中构造函数后的冒号

    C 43 43 中构造函数后的冒号 在C 43 43 中离不开类的定义 xff0c 而构造函数则是类的定义中很重要的一环 我们在构造函数中常常见到如下定义 xff1a span class token keyword class span
  • 论C语言没有输出的可能问题

    论C语言没有输出的可能问题 1 今天帮别人找bug xff0c 说是程序没有输出 题目如下 xff1a 错误代码如下 xff1a span class token macro property span class token direct
  • 【VS2019】报错:E0349没有与这些操作数匹配的运算符

    报错 xff1a E0349没有与这些操作数匹配的运算符 调试程序遇到该错误 xff0c 特此记录 span class token macro property span class token directive keyword inc
  • 基于docker技术搭建hadoop与mapreduce分布式环境

    基于docker技术搭建hadoop与mapreduce分布式环境 一 安装doker 1 宿主环境确认 如果没有的话 安装lsb relaease工具 apt install lsb release 检查版本 lsb release a
  • GNU Radio3.8创建OOT的详细过程(进阶/C++)

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程