为什么我的自定义块会两次进入 GNU Radio 中的 general_work() 函数?

Why is my custom block going twice into general_work() function in GNU Radio?

我正在创建一个自定义块“组合”,它从第一个输入中获取 20 个字节的数据。第一个输入的值指定要从第二个输入读取并写入输出文件的字节数。

每当我执行流程图时,打印显示代码两次进入通用工作函数。它在第一次和第二次读取正确的数据,它只是读取虚假值并将这些不正确的数据写入输出接收器。

我正在为输入使用以下签名:

Combine_impl::Combine_impl()
      : gr::block("Combine",
              gr::io_signature::make(2, 2, sizeof(unsigned char)),
              gr::io_signature::make(1, 1, sizeof(unsigned char)))
    {}

我认为我的问题在于预测函数和使用每个函数的用法。我已经尝试在 forecast 中这样做,但它仍然两次进入 general_work 函数并将不正确的数据写入输出文件。

ninput_items_required[0] = 20;
ninput_items_required[1] = 7;   //because the first input has a value of 7 and will read 7 bytes of data from the second input

有人可以帮我确定这里到底出了什么问题吗?另外,这里应该如何使用 consume_each() 函数?

我修改了 forecast 函数以获取每个输入中使用的项目的确切数量:

void Combine_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required)
{
     ninput_items_required[0] = 20;
     ninput_items_required[1] = 7;
}

我没有使用 consume_each() 来指定所有输入中消耗的字节数,而是使用了 consume() 为每个输入单独指定此数字的函数:

consume(0, 20); //20 bytes of input at index 0 were consumed
consume(1, 7);  //7 bytes of input at index 1 were consumed

而不是 returning noutput_items 来自 general_work 函数,我 return 以下内容。它恰好指定了要 returned 的字节数,其值不同于 noutput_items.

return (20 + 7);