Gnuradio,OOT:正在更正标记流块的send()
Gnuradio,OOT: correcting send() for tagged stream block?
我需要帮助制作gnuradio OOT模块。实际上,我正在尝试扩展一个代码。
我正在尝试制作2 TX 1Rx标记流块(OOT)。对于1Tx 1Rx运行良好。我正试图延长它。现在的问题是,我没有能够配置send()函数。有了这个代码,一个发射机发射,但另一个不工作。子开发规范、频率和其他参数分配正确。我查过了。
如果我试着做测试,它并没有显示出任何问题。我检查了我的USRP X310的端口,它运行良好。
这是代码。我放了一个简短的部分来处理发送和接收缓冲区。
void
usrp_echotimer_cc_impl::send()
{
// Data to USRP
num_tx_samps = d_tx_stream->send(d_in_send1, total_num_samps,
d_metadata_tx, total_num_samps/(float)d_samp_rate+d_timeout_tx);
num_tx_samps = d_tx_stream->send(d_in_send0, total_num_samps,
d_metadata_tx, total_num_samps/(float)d_samp_rate+d_timeout_tx);
}
int
usrp_echotimer_cc_impl::work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
gr_complex *in0 = (gr_complex *) input_items[0];
gr_complex *in1 = (gr_complex *) input_items[1];
gr_complex *out = (gr_complex *) output_items[0];
// Set output items on packet length
noutput_items = ninput_items[0]=ninput_items[1];
// Resize output buffer
if(d_out_buffer.size()!=noutput_items)
d_out_buffer.resize(noutput_items);
// Send thread
d_in_send0 = in0;
d_in_send1 = in1;
d_noutput_items_send = noutput_items;
d_thread_send =
gr::thread::thread(boost::bind(&usrp_echotimer_cc_impl::send, this));
// Receive thread
d_out_recv = &d_out_buffer[0];
d_noutput_items_recv = noutput_items;
d_thread_recv =
gr::thread::thread(boost::bind(&usrp_echotimer_cc_impl::receive, this));
我的系统配置是X310,子板SBX-120,我使用的是UHD-3.9。我检查了subdev的规格、增益和频率分配。那些都很好。
完整性:这是昨天GNU电台邮件列表上的问题;Sanjoy已经得到了两个回应:
马丁·布劳恩写道:
对不起,Sanjoy,
我们需要更多的信息才能给你更好的信息反馈目前还不清楚你到底想实现什么,而且到底是什么失败了。
也许这有助于入门:http://gnuradio.org/redmine/projects/gnuradio/wiki/ReportingErrors
干杯,Martin
我的答案有点长,但这里有。摘录:
你好,Sanjoy,
我正在尝试制作2 TX 1Rx标记流块(OOT)。对于1Tx 1Rx,它运行良好。我正在努力扩展它。现在的问题是,我我无法配置send()函数。
有没有你创建自己的区块的特殊原因?有什么功能吗在USRP水槽和gr-uhd附带的来源上失踪?
send()函数看起来有点奇怪;你在做什么在一个信道上相继传输两个东西。而且(从编程风格的角度来看)你应该做的是传递要作为引用或其他内容发送的缓冲区,但不能将它们保存到类属性中,然后调用send()。发送两个缓冲区到两个不同的通道,则需要使用向量包含两个缓冲区——看看rx_multi_samples;的当然是recv()而不是sends(),但语义是相同的。
noutputitems是给你的,让你的工作现在可以产生多少,这就是为什么它是一个参数。
GNU Radio没有理由不能再次调用您的工作函数,而usrp_echotimer_cc_impl::send()甚至还没有开始传输样本。然后,您的d_send变量将被覆盖。
由于单个X310本质上是一致的,并且具有相同的时间,因此您可以简单地使用USRP接收器和源,在具有相同时间规范的两者上使用set_start_time(…),并让流程图在不同线程中一致地消耗和生成样本。
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- ZMQ::send() 抛出异常并终止 QNX 进程.为什么以及如何从中恢复?
- 在UNIX中通过recv/send交换数据时,如何正确使用缓冲区
- 如何为winsock的send()函数构造constchar*缓冲区
- 实时线程中的 ZeroMQ inproc PubSub send() 调用会导致严重的阻塞吗?
- Epoll zero recv() and negative(EAGAIN) send()
- QDBus send int[]
- 如何在 c++ 中正确读取 GRC 块"Random Source"的字节输出数据到自己的 OOT 块中?
- send() 或 recv() 未同步
- 使用SEND()之前,请使用Select()检查套接字
- shutdown() 和 closesocket() 在 SOCKET 上的 send() 之后不久
- 对'cocos2d::network::HttpClient::send(cocos2d::network::HttpRequest*)'的未定义引用
- 如何在MPI_scatterv中正确设置"send counts"和"displacement"参数?
- 使用Send()发送更大的数据
- 呼叫send()关闭申请的情况下没有错误
- 如果send()返回x字节,则recv()在一个呼叫中获取相同数量的字节
- send()在客户端关闭连接时未报告ENOTCONN(AS400)
- 有没有办法方便地为 Winsock send() 生成 HTTP 标头,而不是手动连接字符串
- Gnuradio,OOT:正在更正标记流块的send()