Hi,
I am studying GNURadio now. but I have a problem with it. At first,
there is a test file called test_usrp_standard_tx.cc. This file is work
well and usrp can be shutdown automatically when all my wanted data are
transmitted. then, I add a code like followed:
//test_usrp_standard_tx.cc
…
utx->start();
test_output(utx, (long long)nsamples, amp, waveform);
while(1); // added code
return 0;
}
As result of Spectrum Analyzer, it always have frequency spectrum even
though I pull out usrp’s USB wire. So, I think the action of shutdown
usrp is occured in destructor.
However, when I test my own code, it cannot shutdown usrp too. here is
my new test code:
gr_message_source_sptr x0 = gr_make_message_source(1, 4);
gr_top_block_sptr tb = gr_make_top_block(“topblock”);
void* msg_source_proc (void *args)
{
…
gr_message_sptr msg = gr_make_message_from_string(s, 0, 0, 0);
x0->msgq()->insert_tail(msg);
return NULL;
}
main()
{ pthread_t thd_src;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&thd_src, &attr, msg_source_proc, NULL);
…
usrp_sink_c_sptr x6 = usrp_make_sink_c(which_board, interp_rate,
nchan, -1, 0, 0);
usrp_subdev_spec subdev_spec = x6->pick_tx_subdevice();
db_base_sptr db = x6->selected_subdev(subdev_spec);
…
usrp_tune_result r;
x6->tune(db->which(), db, center_freq, &r);
db->set_enable(true);
tb->connect(x0,0,x1,0);//connect blocks
tb->connect(x1,0,x2,0);
tb->connect(x2,0,x3,0);
tb->connect(x3,0,x4,0);
tb->connect(x4,0,x5,0);
tb->connect(x5,0,x6,0);
tb->run();
printf ("*******************\n");
return 0;
}
The result showned that it can send a pkt well but cannot shutdown
usrp and “printf (”*******************\n")" have not print;
So I think the program doesn’t jump out of “tb->run” . to say
nothing of destsructor which is to shutdown usrp.
what’s wrong with this? I need you help.
thank you very much
best wishes!