On 04/05/2018 04:55 AM, Matis Alun via USRP-users wrote:

Hi usrp users,

I experienced some problem using my X300 + TwinRx over 1 Gb/s link.

The following code example shows that after the iteration number 253, the program stops
with the following traceback:

terminate called after throwing an instance of 'uhd::io_error'
what(): EnvironmentError: IOError: [0/Radio_0] sr_write() failed: EnvironmentError: IOError: Block ctrl (CE_01_Port_40) no response packet - AssertionError: bool(buff)
  in uint64_t ctrl_iface_impl::wait_for_ack(bool)
  at /uhd_3.10.3.0-release/lib/rfnoc/ctrl_iface.cpp:204

I have good news: If I move the part of the code which construct the rx_stream, there is no errors.

Is someone can explain me ? Is this an uhd bug or not ?

Matis

This should be possible, but it seems awkward and unusual to do what you're doing, in the way that you're doing it.


You should:

STREAM_MODE_START_CONTINUOUS

read as much data as you want

STREAM_MODE_STOP_CONTINUOUS

That is, there's no reason to keep doing the start/stop on every iteration, since you aren't pausing, you're basically just continuous streaming in an
  awkward and unusual way.

Now, this shouldn't raise that exception, but the workaround is to structure your code without tightly looping on START/STOP.


bool test2() {
    std::string args="addr=192.168.10.2";
    uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(args);

    std::string subdev_spec="A:0";
    usrp->set_rx_subdev_spec(subdev_spec);
    usrp->set_rx_rate(25e6, 0);
    usrp->set_rx_freq(1240e6, 0);
    usrp->set_rx_gain(50.0, 0);
    usrp->set_rx_antenna("RX1", 0);

    while (true) {
uhd::sensor_value_t lo_locked = usrp->get_rx_sensor("lo_locked",0);
        if (lo_locked.to_bool()) {
            break;
        }
        usleep(10000);
    }


    for (int iteration=0; iteration<1000; iteration++) {
// try this block outside the loop and every thing is ok
        uhd::stream_args_t stream_args("sc16", "sc16");
        stream_args.channels.push_back(0);
uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args);
        // end of block

        cout << "iteration: "<< iteration << endl;
uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
        stream_cmd.num_samps = 0;
        stream_cmd.stream_now = true;
        stream_cmd.time_spec = uhd::time_spec_t();
        rx_stream->issue_stream_cmd(stream_cmd);

        std::vector<std::complex<int16_t>> buff_sc16(524288);
        uhd::rx_metadata_t md;
        int num_rx_samps;


        for (int i=0; i<10; i++) {
num_rx_samps = rx_stream->recv(&buff_sc16.front(), buff_sc16.size(), md, 1.0);
            cout << "recv:"<< num_rx_samps<<endl;
        }

stream_cmd.stream_mode = uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS;
        rx_stream->issue_stream_cmd(stream_cmd);
    }
    return true;
}



_______________________________________________
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

Reply via email to