diff options
author | michael-west <michael.west@ettus.com> | 2021-04-15 23:51:25 -0700 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2021-04-29 15:12:05 -0500 |
commit | 1488781b091484d52e7c9b96115b0ab5a9b3e957 (patch) | |
tree | d34089ad092c8bed572757d9edccd5183fe57549 /host/utils/uhd_cal_tx_iq_balance.cpp | |
parent | d689df23fb4bf38e1abc23b06767fc26aa27c163 (diff) | |
download | uhd-1488781b091484d52e7c9b96115b0ab5a9b3e957.tar.gz uhd-1488781b091484d52e7c9b96115b0ab5a9b3e957.tar.bz2 uhd-1488781b091484d52e7c9b96115b0ab5a9b3e957.zip |
utils: Improve cal TX threads
Increase thread priority on TX thread and remove memory copy to reduce
underruns.
Signed-off-by: michael-west <michael.west@ettus.com>
Diffstat (limited to 'host/utils/uhd_cal_tx_iq_balance.cpp')
-rw-r--r-- | host/utils/uhd_cal_tx_iq_balance.cpp | 50 |
1 files changed, 6 insertions, 44 deletions
diff --git a/host/utils/uhd_cal_tx_iq_balance.cpp b/host/utils/uhd_cal_tx_iq_balance.cpp index 5f2695784..5c9f981c9 100644 --- a/host/utils/uhd_cal_tx_iq_balance.cpp +++ b/host/utils/uhd_cal_tx_iq_balance.cpp @@ -7,55 +7,18 @@ #include "usrp_cal_utils.hpp" #include <uhd/utils/safe_main.hpp> -#include <uhd/utils/thread.hpp> #include <boost/math/special_functions/round.hpp> #include <boost/program_options.hpp> -#include <boost/thread/thread.hpp> #include <chrono> #include <complex> #include <cstdlib> #include <ctime> #include <functional> #include <iostream> -#include <thread> namespace po = boost::program_options; /*********************************************************************** - * Transmit thread - **********************************************************************/ -static void tx_thread(uhd::usrp::multi_usrp::sptr usrp, - uhd::tx_streamer::sptr tx_stream, - const double tx_wave_freq, - const double tx_wave_ampl) -{ - // set max TX gain - usrp->set_tx_gain(usrp->get_tx_gain_range().stop()); - - // setup variables and allocate buffer - uhd::tx_metadata_t md; - md.has_time_spec = false; - std::vector<samp_type> buff(tx_stream->get_max_num_samps() * 10); - - // values for the wave table lookup - size_t index = 0; - const double tx_rate = usrp->get_tx_rate(); - const size_t step = boost::math::iround(wave_table_len * tx_wave_freq / tx_rate); - wave_table table(tx_wave_ampl); - - // fill buff and send until interrupted - while (not boost::this_thread::interruption_requested()) { - for (size_t i = 0; i < buff.size(); i++) - buff[i] = table(index += step); - tx_stream->send(&buff.front(), buff.size(), md); - } - - // send a mini EOB packet - md.end_of_burst = true; - tx_stream->send("", 0, md); -} - -/*********************************************************************** * Tune RX and TX routine **********************************************************************/ static double tune_rx_and_tx( @@ -145,9 +108,10 @@ int UHD_SAFE_MAIN(int argc, char* argv[]) uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args); // create a transmitter thread - boost::thread_group threads; - threads.create_thread( - std::bind(&tx_thread, usrp, tx_stream, tx_wave_freq, tx_wave_ampl)); + std::atomic_flag transmit = ATOMIC_FLAG_INIT; + transmit.test_and_set(); + auto transmitter = std::thread( + std::bind(&tx_thread, &transmit, usrp, tx_stream, tx_wave_freq, tx_wave_ampl)); // re-usable buffer for samples std::vector<samp_type> buff; @@ -292,10 +256,8 @@ int UHD_SAFE_MAIN(int argc, char* argv[]) std::cout << std::endl; // stop the transmitter - threads.interrupt_all(); - std::this_thread::sleep_for( - std::chrono::milliseconds(500)); // wait for threads to finish - threads.join_all(); + transmit.clear(); + transmitter.join(); store_results(results, "TX", "tx", "iq", serial); |