Hi Marcus,
Thank you for your answer, I made a simple flowgraph to summarize my problem.
Here is also the backtrace of the segfault:
#0 pmt::eqv_raw (x=x@entry=0x0, y=0x2529300) at
/usr/local/src/gnuradio/gnuradio-runtime/lib/pmt/pmt.cc:1104
#1 0x00007f7f159065f6 in pmt::assv_raw (obj=0x0, alist=0x7f7ebc000930) at
/usr/local/src/gnuradio/gnuradio-runtime/lib/pmt/pmt.cc:1235
#2 0x00007f7f15906683 in pmt::assv (obj=..., alist=...) at
/usr/local/src/gnuradio/gnuradio-runtime/lib/pmt/pmt.cc:1248
#3 0x00007f7f15906700 in pmt::dict_has_key (dict=..., key=...) at
/usr/local/src/gnuradio/gnuradio-runtime/lib/pmt/pmt.cc:937
#4 0x00007f7f0154f5db in gr::uhd::usrp_block_impl::msg_handler_command
(this=0x256fcf8, msg=...)
at /usr/local/src/gnuradio/gr-uhd/lib/usrp_block_impl.cc:501
#5 0x00007f7f01551ba2 in boost::_mfi::mf1<void, gr::uhd::usrp_block_impl,
boost::intrusive_ptr<pmt::pmt_base> >::operator() (a1=..., p=0x256fcf8,
this=0x261a1e0) at /usr/include/boost/bind/mem_fn_template.hpp:165
#6 boost::_bi::list2<boost::_bi::value<gr::uhd::usrp_block_impl*>,
boost::arg<1> >::operator()<boost::_mfi::mf1<void, gr::uhd::usrp_block_impl,
boost::intrusive_ptr<pmt::pmt_base> >,
boost::_bi::list1<boost::intrusive_ptr<pmt::pmt_base>&> > (a=<synthetic
pointer>, f=..., this=0x261a1f0)
at /usr/include/boost/bind/bind.hpp:313
#7 boost::_bi::bind_t<void, boost::_mfi::mf1<void, gr::uhd::usrp_block_impl,
boost::intrusive_ptr<pmt::pmt_base> >,
boost::_bi::list2<boost::_bi::value<gr::uhd::usrp_block_impl*>, boost::arg<1> >
>::operator()<boost::intrusive_ptr<pmt::pmt_base> > (a1=..., this=0x261a1e0)
at /usr/include/boost/bind/bind_template.hpp:32
#8
boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void,
boost::_mfi::mf1<void, gr::uhd::usrp_block_impl,
boost::intrusive_ptr<pmt::pmt_base> >,
boost::_bi::list2<boost::_bi::value<gr::uhd::usrp_block_impl*>, boost::arg<1> >
>, void, boost::intrusive_ptr<pmt::pmt_base> >::invoke (function_obj_ptr=...,
a0=...) at /usr/include/boost/function/function_template.hpp:159
#9 0x00007f7f0155cac2 in boost::function1<void,
boost::intrusive_ptr<pmt::pmt_base> >::operator() (a0=..., this=0x261a1d8)
at /usr/include/boost/function/function_template.hpp:773
#10 gr::basic_block::dispatch_msg (this=<optimized out>, which_port=...,
msg=...)
at
/usr/local/src/gnuradio/gnuradio-runtime/include/gnuradio/basic_block.h:134
#11 0x00007f7f15beffd3 in gr::tpb_thread_body::tpb_thread_body
(this=0x7f7ecb7fddc0, block=..., start_sync=..., max_noutput_items=<optimized
out>)
at /usr/local/src/gnuradio/gnuradio-runtime/lib/tpb_thread_body.cc:107
---Type <return> to continue, or q <return> to quit---
#12 0x00007f7f15bde434 in gr::tpb_container::operator() (this=0x26c6990) at
/usr/local/src/gnuradio/gnuradio-runtime/lib/scheduler_tpb.cc:46
#13 gr::thread::thread_body_wrapper<gr::tpb_container>::operator()
(this=0x26c6990)
at
/usr/local/src/gnuradio/gnuradio-runtime/include/gnuradio/thread/thread_body_wrapper.h:51
#14
boost::detail::function::void_function_obj_invoker0<gr::thread::thread_body_wrapper<gr::tpb_container>,
void>::invoke (function_obj_ptr=...)
at /usr/include/boost/function/function_template.hpp:159
#15 0x00007f7f15b7bfa0 in boost::function0<void>::operator() (this=<optimized
out>) at /usr/include/boost/function/function_template.hpp:773
#16 boost::detail::thread_data<boost::function0<void> >::run (this=<optimized
out>) at /usr/include/boost/thread/detail/thread.hpp:116
#17 0x00007f7f149605d5 in ?? () from
/usr/lib/x86_64-linux-gnu/libboost_thread.so.1.58.0
#18 0x00007f7f186486ba in start_thread (arg=0x7f7ecb7fe700) at
pthread_create.c:333
#19 0x00007f7f1837e41d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:109
As I can see the problem is when reading my dict, but it seems to be right.
Again here is what I sent to the usrp command message:
pmt::pmt_t command = pmt::make_dict();
command = pmt::dict_add(command, pmt::mp("gain"), pmt::mp(gain)); //
Specify gain
ommand = pmt::dict_add(command, pmt::mp("antenna"), pmt::mp("TX/RX")); //
Switch antenna
command = pmt::dict_add(command, pmt::mp("chan"), pmt::mp(0)); //
Specify channel
message_port_pub(pmt::mp("cmd") , command);
Thank for your help!
De : Marcus Müller
Envoyé le :Wednesday, December 5, 2018 11:30
À : samuel verdon; [email protected]
Objet :Re: [USRP-users] Segmentation fault commands to USRP with gnuradio
Hi Samuel,
luckily, these days, segfaults are rather rare in stock GNU Radio, and
UHD.
Can you share your exact flowgraph, or a GDB-generated backtrace, with
us?
Best regards,
Marcus
On Wed, 2018-12-05 at 10:31 +0100, samuel verdon via USRP-users wrote:
> Hello,
>
> I’m trying to command my usrp B200mini via its command port. I used
> the documentation from here:
> https://www.gnuradio.org/doc/doxygen/page_uhd.html
>
> here is my command:
> pmt::pmt_t command = pmt::make_dict();
> command = pmt::dict_add(command, pmt::mp("gain"),
> pmt::mp(gain)); // Specify gain
> command = pmt::dict_add(command, pmt::mp("antenna"),
> pmt::mp("TX/RX")); // Switch antenna
> command = pmt::dict_add(command, pmt::mp("chan"),
> pmt::mp(0)); // Specify channel
> message_port_pub(pmt::mp("cmd") , command);
>
> I connect my block to a debug message block, and I received this
>
> ************MESSAGE DEBUG PRINT***************
> ((chan. 0) (antenna, TX/RX) (gain, 63))
>
> But when I connect to the “UHD: USRP sink” I get a segmentation
> fault… ☹
> I have tried different command always the same problem.
> Can someone show me an example working with tis command?
> I am quite deseparate..
>
> Ubuntu 16.04
> Gnuradio 3.7.12
> UHD driver UHD_3.11
>
> Thank you for your help
>
> _______________________________________________
> USRP-users mailing list
> [email protected]
> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
_______________________________________________
USRP-users mailing list
[email protected]
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com