Thanks for the tip Ron! It got me (almost) all the way home. I can now interface with the USRP via the C++ API, which I couldn't do previously.
Unfortunately there's still a niggling problem with the Python API (a different one than before), but I will start a new thread to cover that issue. Cheers, Brendan. On Sun, Apr 4, 2021 at 11:53 AM Ron Economos <w...@comcast.net> wrote: > This is just a guess, but you could try: > > -DCMAKE_SHARED_LINKER_FLAGS="-latomic" > > in addition. > > Ron > On 4/3/21 18:34, Brendan Horsfield wrote: > > Thanks Ken. As you suggested, I added -DCMAKE_EXE_LINKER_FLAGS="-latomic" > to the CMake call. > > The good news is that the UHD build & installation process completed > successfully. > > The bad news is that when I try to import the uhd module in Python3, I > get the following error: > > pi@raspberrypi:~ $ python3 > Python 3.7.3 (default, Jan 22 2021, 20:04:44) > [GCC 8.3.0] on linux > Type "help", "copyright", "credits" or "license" for more information. > >>> import uhd > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "/usr/local/lib/python3/dist-packages/uhd/__init__.py", line 10, in > <module> > from . import types > File "/usr/local/lib/python3/dist-packages/uhd/types.py", line 10, in > <module> > from . import libpyuhd as lib > ImportError: /usr/local/lib/libuhd.so.4.0.0: undefined symbol: > __atomic_fetch_add_8 > >>> > > Did you encounter this problem too? > > I guess the next step is to hack the "CMakeLists.txt" files as per the > link you sent me. Just to clarify one point first: If I modify the > CMakeLists.txt files, do I still need to include > -DCMAKE_EXE_LINKER_FLAGS="-latomic" in the CMake call? > > Thanks, > Brendan. > > > > On Sat, Apr 3, 2021 at 10:29 PM Clark (US), Kenneth C < > kenneth.c.cla...@boeing.com> wrote: > >> >> I had the same problem build UHD on RPi4 >> >> Answer here: >> https://gitlab.kitware.com/cmake/cmake/-/issues/21174 >> >> Add to CMake call: >> -DCMAKE_EXE_LINKER_FLAGS="-latomic" >> >> Regards, >> >> Ken >> >> >> -----Original Message----- >> From: usrp-users-requ...@lists.ettus.com [mailto: >> usrp-users-requ...@lists.ettus.com] >> Sent: Saturday, April 3, 2021 11:13 >> To: usrp-users@lists.ettus.com >> Subject: [EXTERNAL] USRP-users Digest, Vol 128, Issue 7 >> >> EXT email: be mindful of links/attachments. >> >> >> >> Send USRP-users mailing list submissions to >> usrp-users@lists.ettus.com >> >> To subscribe or unsubscribe via email, send a message with subject or >> body 'help' to >> usrp-users-requ...@lists.ettus.com >> >> You can reach the person managing the list at >> usrp-users-ow...@lists.ettus.com >> >> When replying, please edit your Subject line so it is more specific than >> "Re: Contents of USRP-users digest..." >> >> Today's Topics: >> >> 1. Re: Problem with interfacing Raspberry Pi 4 to USRP B210 with >> Python API >> (Brendan Horsfield) >> 2. Re: Intermittent problem with GPS synchronization for multiple E310 >> units >> (Ofer Saferman) >> >> >> ---------------------------------------------------------------------- >> >> Message: 1 >> Date: Sat, 3 Apr 2021 21:07:59 +1000 >> From: Brendan Horsfield <brendan.horsfi...@vectalabs.com> >> Subject: [USRP-users] Re: Problem with interfacing Raspberry Pi 4 to >> USRP B210 with Python API >> To: Marcus D Leech <patchvonbr...@gmail.com> >> Cc: USRP-users@lists.ettus.com >> Message-ID: >> < >> calnmz8wg3gqnkaomrhhcbpagttfubm3fkmzjhcwhuaghrlu...@mail.gmail.com> >> Content-Type: multipart/alternative; >> boundary="000000000000dc3aeb05bf0f7ace" >> >> Hi Marcus, >> >> I have tried your suggestion, but unfortunately without success: >> >> Per your advice, I have edited the file "cmake.lwt" in the folder >> /usr/local/lib/python3.7/dist-packages/pybombs/templates to include the >> option "-DENABLE_PYTHON_API=ON" in the calls to cmake. The modified >> commands are as follows: >> >> configure: cmake .. -DENABLE_PYTHON_API=ON >> -DCMAKE_BUILD_TYPE=$cmakebuildtype -DCMAKE_INSTALL_PREFIX=$prefix >> $config_opt -Wno-dev >> configure_static: cmake .. -DENABLE_PYTHON_API=ON >> -DCMAKE_BUILD_TYPE=$cmakebuildtype -DCMAKE_INSTALL_PREFIX=$prefix >> -DENABLE_STATIC_LIBS=True $config_opt >> >> I removed the previous UHD installation and re-ran "pybombs install uhd", >> but the end result was much the same: the installation process completed >> without errors, but the Python API was not included in the installation. >> >> QUESTION 1: Can you tell me if PyBOMBS actually builds the UHD driver >> from source, or does it simply copy a pre-compiled binary onto my system? >> The reason I ask is that PyBOMBS is quite quick to install the UHD driver, >> whereas the non-PyBOMBS approach is VERY slow (i.e. around 60 minutes to >> get to 53%, at which point it crashes out with an error). >> >> QUESTION 2: This whole process feels more difficult than it should be. >> Why isn't the Python API installed with the UHD driver by default? Would >> I be better off using another language (like C++) to control the USRP? >> >> Thanks, >> Brendan. >> >> >> >> On Fri, Apr 2, 2021 at 11:25 PM Marcus D Leech <patchvonbr...@gmail.com> >> wrote: >> >> > Perhaps look at the PyBombs recipe for your platform—there’s probably >> > a compiler flag that needs to be set that you’re missing, but I don’t >> > know what that is. >> > >> > Also, in general, you don’t need to become root to compile and build >> > code—only needed during the “make install” >> > >> > >> > >> > Sent from my iPhone >> > >> > On Apr 2, 2021, at 7:19 AM, Brendan Horsfield < >> > brendan.horsfi...@vectalabs.com> wrote: >> > >> > >> > Hi Folks, >> > >> > I would like to interface my Raspberry Pi 4 to a USRP B210 via the >> > Python API. This requires the UHD driver to be built from source. >> > Unfortunately, whenever I try this I encounter some errors that stop >> > the build process in its tracks. >> > >> > Details of the error are as follows: >> > >> > [ 53%] Linking CXX executable test_clock_synch >> > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to >> > `__atomic_compare_exchange_8' >> > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to >> > `__atomic_load_8' >> > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to >> > `__atomic_store_8' >> > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to >> > `__atomic_fetch_add_8' >> > collect2: error: ld returned 1 exit status >> > make[2]: *** [examples/CMakeFiles/test_clock_synch.dir/build.make:95: >> > examples/test_clock_synch] Error 1 >> > make[1]: *** [CMakeFiles/Makefile2:1039: >> > examples/CMakeFiles/test_clock_synch.dir/all] Error 2 >> > make: *** [Makefile:163: all] Error 2 >> > >> > The process I have been using is as follows: >> > >> > STEP 1: INSTALL DEPENDENCIES >> > sudo apt-get install libboost-all-dev libusb-1.0-0-dev doxygen >> > python3-docutils python3-mako python3-numpy python3-requests >> > python3-ruamel.yaml python3-setuptools cmake build-essential >> > >> > STEP 2: BUILD UHD DRIVER FROM SOURCE >> > cd /home/pi >> > mkdir workarea-uhd >> > cd workarea-uhd >> > git clone https://github.com/EttusResearch/uhd >> > cd uhd >> > git checkout v4.0.0.0 >> > cd host >> > mkdir build >> > cd build >> > sudo cmake -DNEON_SIMD_ENABLE=OFF -DENABLE_PYTHON_API=ON ../ sudo make >> > ---> (ERRORS OCCUR DURING "MAKE" PROCESS) >> > >> > My system configuration is as follows: >> > Hardware: Raspberry Pi 4 Model B Rev 1.4 >> > OS: Raspbian GNU/Linux 10 (buster) (32-bit, armv7l) Ettus USRP B210 >> > >> > Does anyone know what the problem could be, and how I can resolve it? >> > >> > One final note: Using PyBOMBS, I was able to successfully build & >> > install the UHD driver and connect to the USRP. Unfortunately the >> > PyBOMBS build does not include the Python API, which is what I really >> > want. Is there a different version of the PyBOMBS build that includes >> the Python API? >> > >> > Thanks & Regards, >> > Brendan. >> > >> > >> > >> > _______________________________________________ >> > USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe >> > send an email to usrp-users-le...@lists.ettus.com >> > >> > >> -------------- next part -------------- >> A message part incompatible with plain text digests has been removed ... >> Name: not available >> Type: text/html >> Size: 5624 bytes >> Desc: not available >> >> ------------------------------ >> >> Message: 2 >> Date: Sat, 3 Apr 2021 14:12:35 +0300 >> From: Ofer Saferman <o...@navigicom.com> >> Subject: [USRP-users] Re: Intermittent problem with GPS >> synchronization for multiple E310 units >> To: usrp-users <usrp-users@lists.ettus.com> >> Message-ID: >> <CACDReSwXUvJ8_LimfVOn4StHQEGhNntY-nCSv0aYdBsX= >> at...@mail.gmail.com> >> Content-Type: multipart/alternative; >> boundary="000000000000566d1705bf0f8b0e" >> >> Hello Philip, >> >> Thank you for the explanation. >> What would you suggest? >> opkg exists. There must be a way to install ntpd without needing to >> rebuild the image. >> Maybe use pybombs or other methods? >> git also works. Maybe download a different package manager and compile it? >> >> It seems that Marcus pointed out a great benefit of E310 units running >> gpsd, but without ntpd system clock can't sync and it seems that this >> feature can vastly simplify gps synchronization among E310 units. >> >> I would be very grateful if anybody can suggest a solution to install >> ntpd on E310 units running UHD 3.15 SD-card image. >> >> Regards, >> Ofer Saferman. >> >> On Sat, Apr 3, 2021 at 10:30 AM <usrp-users-requ...@lists.ettus.com> >> wrote: >> >> > Send USRP-users mailing list submissions to >> > usrp-users@lists.ettus.com >> > >> > To subscribe or unsubscribe via email, send a message with subject or >> > body 'help' to >> > usrp-users-requ...@lists.ettus.com >> > >> > You can reach the person managing the list at >> > usrp-users-ow...@lists.ettus.com >> > >> > When replying, please edit your Subject line so it is more specific >> > than "Re: Contents of USRP-users digest..."Today's Topics: >> > >> > 1. Re: Intermittent problem with GPS synchronization for multiple >> > E310 units >> > (Philip Balister) >> > >> > >> > >> > ---------- Forwarded message ---------- >> > From: Philip Balister <phi...@balister.org> >> > To: Ofer Saferman <o...@navigicom.com>, "Marcus D. Leech" < >> > patchvonbr...@gmail.com> >> > Cc: Rob Kossler <rkoss...@nd.edu>, usrp-users >> > <usrp-users@lists.ettus.com> >> > Bcc: >> > Date: Fri, 2 Apr 2021 10:09:43 -0400 >> > Subject: [USRP-users] Re: Intermittent problem with GPS >> > synchronization for multiple E310 units On 4/2/21 7:17 AM, Ofer >> > Saferman wrote: >> > > Marcus Hi, >> > > >> > > Your suggestion below to install ntpd does not work. >> > > The image does not include it. Although the old thread says >> > > otherwise I think it refers to an older UHD release that did include >> ntpd. >> > > Any accurate instructions on how to install it anyway? >> > > Maybe opkg should be configured to access another repository? >> > > Doing: opkg list | grep ntpd, does not yield anything useful so it >> > > is not just a question of typing it correctly. >> > >> > As far as I know, no image has been setup to use package feeds. >> > >> > I know ntpd worked in release4 images, pretty sure the newer image was >> > redone and things have been left out that used to be there. >> > >> > Philip >> > >> > > >> > > Regards, >> > > Ofer Saferman >> > > >> > > On Thu, Apr 1, 2021 at 4:34 PM Marcus D. Leech >> > > <patchvonbr...@gmail.com> >> > > wrote: >> > > >> > >> On 04/01/2021 06:00 AM, Ofer Saferman wrote: >> > >> >> > >> Hello Marcus, >> > >> >> > >> I am working on E310 with the latest UHD-3.15 SD card image. >> > >> It seems not to include ntpd that is required to synchronize system >> > >> time to GPS time. >> > >> Any idea how to install it on the E310? >> > >> >> > >> Regards, >> > >> Ofer Saferman >> > >> >> > >> sudo opkg install ntpd >> > >> >> > >> should work, but it has been a while since I installed any packages >> > >> on >> > my >> > >> E310. >> > >> >> > >> The E310 is based on OpenEmbedded Linux, so all the info about >> > installing >> > >> and managing packages on OpenEmbedded apply. >> > >> >> > >> >> > >> >> > >> On Wed, Mar 31, 2021 at 11:40 PM Marcus D Leech < >> > patchvonbr...@gmail.com> >> > >> wrote: >> > >> >> > >>> Just use gettimeofday() or any of the myriad subtle variants >> > >>> available >> > in >> > >>> boost to get you the Linux system time, and use that in a call to >> > >>> set_time_next_pps(). >> > >>> >> > >>> The fact that all your E310s will be running GPSD means they’ll be >> > >>> adjusting system time appropriately and they’ll all agree on what >> > >>> time >> > it >> > >>> is, depending on the level of precision you need. >> > >>> >> > >>> Sent from my iPhone >> > >>> >> > >>> On Mar 31, 2021, at 3:50 PM, Ofer Saferman <o...@navigicom.com> >> wrote: >> > >>> >> > >>> >> > >>> Thank you Rob. Your suggestions are always helpful. I will look >> > >>> into using gps_gpgga. >> > >>> Thank you Marcus. I am already adding one, per other examples >> > >>> posted >> > here >> > >>> and sync_to_gps example. Can you please comment how I can benefit >> > >>> from >> > the >> > >>> fact that E310 units use gpsd in Linux? >> > >>> >> > >>> Regards, >> > >>> Ofer Saferman >> > >>> >> > >>> On Wed, Mar 31, 2021 at 10:13 PM Marcus D Leech < >> > patchvonbr...@gmail.com> >> > >>> wrote: >> > >>> >> > >>>> >> > >>>> >> > >>>> Sent from my iPhone >> > >>>> >> > >>>> On Mar 31, 2021, at 2:22 PM, Rob Kossler <rkoss...@nd.edu> wrote: >> > >>>> >> > >>>> >> > >>>> Hi Ofer, >> > >>>> Take a look at the Ettus source code gps_ctrl.cpp. In >> > >>>> particular, >> > look >> > >>>> at the get_sentence() usage which in the case of "gps_time" waits >> > >>>> for >> > the >> > >>>> next occurrence (wait=true), but for the others does not wait. >> > >>>> But >> > this >> > >>>> doesn't fully explain the behavior you are seeing. If you do the >> > following: >> > >>>> 1) wait for PPS time to change >> > >>>> 2) read the "gps_time" sensor >> > >>>> 3) set_time_next_pps (use the value you just read) >> > >>>> >> > >>>> Add 1 to the time you just read before calling set_time_next_pps. >> > >>>> >> > >>>> >> > >>>> It should still work because the "gps_time" command should just >> > >>>> wait until the next PPS. I guess it depends upon how >> > >>>> "synchronized" are >> > the >> > >>>> received NMEA string with the PPS edge. Step 1 above waits for >> > >>>> the >> > PPS >> > >>>> edge, but maybe the NMEA string arrives 0.1 secs before or after >> > that. I >> > >>>> don't really know. Perhaps you need to switch to using "gps_gpgga" >> > such >> > >>>> that there is no additional wait added and also perhaps you >> > >>>> should >> > add step >> > >>>> 1B which would be just a fixed delay of perhaps 0.4 secs so that >> > >>>> you >> > will >> > >>>> read the NMEA string in between the PPS edges. >> > >>>> Rob >> > >>>> >> > >>>> On Wed, Mar 31, 2021 at 1:22 PM Rob Kossler <rkoss...@nd.edu> >> wrote: >> > >>>> >> > >>>>> Hi Ofer, >> > >>>>> I don't know why the "gps_time" sensor takes long to read. But, >> > >>>>> can >> > you >> > >>>>> try the other sensors (perhaps there is a "gps_gpgga" sensor?)? >> > >>>>> The >> > time >> > >>>>> is embedded in these as well. >> > >>>>> Rob >> > >>>>> >> > >>>>> >> > >>>>> On Wed, Mar 31, 2021 at 12:21 PM Ofer Saferman >> > >>>>> <o...@navigicom.com> >> > >>>>> wrote: >> > >>>>> >> > >>>>>> Marcus Hi, >> > >>>>>> >> > >>>>>> If the gps_time "sensor" returns a value only once per second >> > >>>>>> how >> > come >> > >>>>>> I manage to read it sometimes in less than 1 second? >> > >>>>>> In my code the situation is worse than the simple example >> > >>>>>> below. It usually takes more than 1 sec. to read it and >> > >>>>>> sometimes even 1.7 or >> > 1.8 >> > >>>>>> seconds. I don't understand how the size or complexity of the >> > >>>>>> code >> > affects >> > >>>>>> the time it takes to read gps_time. >> > >>>>>> >> > >>>>>> How to treat your comment about the use of GPSD and good >> > >>>>>> synchronization as it relates to code? >> > >>>>>> Should I not change the time source in code and go through the >> > >>>>>> whole process of synchronization using gps_time? >> > >>>>>> Can I "assume" the systems are synced just by the effect they >> > >>>>>> were connected enough time to a GPS antenna? and then just >> > >>>>>> access their >> > time - >> > >>>>>> radio_ctrl->get_time_last_pps()? >> > >>>>>> How to use this information programmatically? >> > >>>>>> >> > >>>>>> Regards, >> > >>>>>> Ofer Saferman >> > >>>>>> >> > >>>>>> >> > >>>>>> ---------- Forwarded message ---------- >> > >>>>>>> From: "Marcus D. Leech" <patchvonbr...@gmail.com> >> > >>>>>>> To: usrp-users@lists.ettus.com >> > >>>>>>> Cc: >> > >>>>>>> Bcc: >> > >>>>>>> Date: Wed, 31 Mar 2021 09:19:20 -0400 >> > >>>>>>> Subject: [USRP-users] Re: Intermittent problem with GPS >> > >>>>>>> synchronization for multiple E310 units On 03/31/2021 06:49 >> > >>>>>>> AM, Ofer Saferman wrote: >> > >>>>>>>> Hello, >> > >>>>>>>> >> > >>>>>>>> I have a system that uses 4 USRP E310 units. >> > >>>>>>>> Each unit is connected to a GPS antenna. >> > >>>>>>>> Time source is set to gpsdo. >> > >>>>>>>> >> > >>>>>>>> I run the same software remotely on all 4 units from a PC. >> > Software >> > >>>>>>>> runs on the units themselves. >> > >>>>>>>> I print out messages to show if the reference is locked and >> > >>>>>>>> the >> > GPS >> > >>>>>>> is >> > >>>>>>>> locked and also what is the GPS time that each unit was >> > >>>>>>> synchronized to. >> > >>>>>>>> In some cases the units synchronize to the same GPS time and >> > >>>>>>>> in >> > >>>>>>> other >> > >>>>>>>> cases there is 1 second difference between GPS time of >> > >>>>>>>> different >> > >>>>>>> units >> > >>>>>>>> thus causing the units to be unsynchronized. >> > >>>>>>>> >> > >>>>>>>> I was wondering how this was possible. >> > >>>>>>>> The synchronization process (documented by others in the past >> > >>>>>>>> on >> > >>>>>>> the >> > >>>>>>>> mailing list) is: >> > >>>>>>>> * Wait for ref and GPS lock >> > >>>>>>>> * Wait for a pps edge (get_time_last_pps) >> > >>>>>>>> * Read gps_time value >> > >>>>>>>> * Sync system clock to GPS clock on next PPS edge >> > >>>>>>> (set_time_next_pps + >> > >>>>>>>> 1.0 sec) >> > >>>>>>>> >> > >>>>>>>> Something similar is also implemented in the sync_to_gps >> example. >> > >>>>>>>> >> > >>>>>>>> In order to debug the problem I decided to time the reading >> > >>>>>>>> of the gps_time sensor to see if there is a clue why >> > >>>>>>>> different units miss >> > >>>>>>> the >> > >>>>>>>> PPS edge and lock to a time of the next second. >> > >>>>>>>> >> > >>>>>>>> I was very surprised to find out that it takes between 0.9 to >> > >>>>>>>> 1.2 seconds to read the gps_time sensor. >> > >>>>>>>> This explains exactly why it is difficult to synchronize >> > >>>>>>>> multiple units to the same time instance because if one unit >> > >>>>>>>> takes 0.9 >> > >>>>>>> seconds >> > >>>>>>>> to read the sensor and the other unit takes 1.2 seconds to >> > >>>>>>>> read >> > the >> > >>>>>>>> sensor then each unit will lock on a different GPS time 1 >> > >>>>>>>> second >> > >>>>>>> apart. >> > >>>>>>>> >> > >>>>>>>> Here is a short software I wrote to time the gps_time sensor >> > >>>>>>> reading: >> > >>>>>>>> --------------------------------------------------------- >> > >>>>>>>> #include <uhd/utils/safe_main.hpp> #include <uhd/device3.hpp> >> > >>>>>>>> //#include <uhd/usrp/multi_usrp.hpp> #include >> > >>>>>>>> <uhd/types/sensors.hpp> #include <boost/program_options.hpp> >> > >>>>>>>> #include <boost/format.hpp> #include <chrono> #include >> > >>>>>>>> <iostream> >> > >>>>>>>> >> > >>>>>>>> namespace po = boost::program_options; >> > >>>>>>>> >> > >>>>>>>> int UHD_SAFE_MAIN(int argc, char *argv[]){ >> > >>>>>>>> >> > >>>>>>>> std::string args; >> > >>>>>>>> >> > >>>>>>>> po::options_description desc("Allowed options"); >> > >>>>>>>> desc.add_options() >> > >>>>>>>> ("help", "help message") ("args", >> > >>>>>>>> po::value<std::string>(&args)->default_value(""), "device >> > >>>>>>>> address args") >> > >>>>>>>> ; >> > >>>>>>>> >> > >>>>>>>> po::variables_map vm; >> > >>>>>>>> po::store(po::parse_command_line(argc, argv, desc), vm); >> > >>>>>>>> po::notify(vm); >> > >>>>>>>> >> > >>>>>>>> //print the help message >> > >>>>>>>> if (vm.count("help")){ >> > >>>>>>>> std::cout << boost::format("Timinig of gps_time: %s") >> > >>>>>>>> % >> > >>>>>>> desc >> > >>>>>>>> << std::endl; >> > >>>>>>>> return ~0; >> > >>>>>>>> } >> > >>>>>>>> >> > >>>>>>>> uhd::device3::sptr usrp = uhd::device3::make(args); >> > >>>>>>>> //uhd::usrp::multi_usrp::sptr usrp = >> > >>>>>>> uhd::usrp::multi_usrp::make(args); >> > >>>>>>>> >> > >>>>>>>> uhd::sensor_value_t gps_time = >> > >>>>>>>> >> > >>>>>>> >> > usrp->get_tree()->access<uhd::sensor_value_t>("/mboards/0/sensors/gps_ >> > usrp->time").get(); >> > >>>>>>>> //uhd::sensor_value_t gps_time = >> > >>>>>>> usrp->get_mboard_sensor("gps_time", 0); >> > >>>>>>>> >> > >>>>>>>> std::chrono::steady_clock::time_point start_time, end_time; >> > >>>>>>>> std::chrono::duration<double> time_diff; // Default unit for >> > >>>>>>> duration >> > >>>>>>>> is seconds. >> > >>>>>>>> >> > >>>>>>>> for(int ii=0 ; ii<20 ; ii++) >> > >>>>>>>> { >> > >>>>>>>> start_time = std::chrono::steady_clock::now(); gps_time = >> > >>>>>>>> >> > >>>>>>> >> > usrp->get_tree()->access<uhd::sensor_value_t>("/mboards/0/sensors/gps_ >> > usrp->time").get(); >> > >>>>>>>> //gps_time = usrp->get_mboard_sensor("gps_time", 0); end_time >> > >>>>>>>> = std::chrono::steady_clock::now(); time_diff = end_time - >> > >>>>>>>> start_time; >> > >>>>>>>> >> > >>>>>>>> std::cout << "gps_time[" << (boost::format("%02d") % ii) << >> "]: " >> > >>>>>>> << >> > >>>>>>>> int64_t(gps_time.to_int()) << ". Time to read \"gps_time\": " >> > >>>>>>>> << >> > >>>>>>>> (boost::format("%0.9f") % time_diff.count()) << " seconds" << >> > >>>>>>> std::endl; >> > >>>>>>>> } >> > >>>>>>>> >> > >>>>>>>> return 0; >> > >>>>>>>> } >> > >>>>>>>> >> > >>>>>>> >> > ---------------------------------------------------------------------- >> > ---------- >> > >>>>>>>> Here are the results of one typical run: >> > >>>>>>>> gps_time[00]: 1617183840. Time to read "gps_time": >> > >>>>>>>> 0.884164380 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[01]: 1617183841. Time to read "gps_time": >> > >>>>>>>> 0.877966469 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[02]: 1617183842. Time to read "gps_time": >> > >>>>>>>> 1.170869661 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[03]: 1617183843. Time to read "gps_time": >> > >>>>>>>> 0.882917987 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[04]: 1617183844. Time to read "gps_time": >> > >>>>>>>> 1.172120154 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[05]: 1617183845. Time to read "gps_time": >> > >>>>>>>> 0.879271985 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[06]: 1617183846. Time to read "gps_time": >> > >>>>>>>> 0.878609099 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[07]: 1617183847. Time to read "gps_time": >> > >>>>>>>> 1.115639282 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[08]: 1617183848. Time to read "gps_time": >> > >>>>>>>> 1.125365551 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[09]: 1617183849. Time to read "gps_time": >> > >>>>>>>> 0.843803231 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[10]: 1617183850. Time to read "gps_time": >> > >>>>>>>> 1.125065740 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[11]: 1617183851. Time to read "gps_time": >> > >>>>>>>> 0.847519817 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[12]: 1617183852. Time to read "gps_time": >> > >>>>>>>> 1.121398945 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[13]: 1617183853. Time to read "gps_time": >> > >>>>>>>> 0.844371533 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[14]: 1617183854. Time to read "gps_time": >> > >>>>>>>> 1.124722726 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[15]: 1617183855. Time to read "gps_time": >> > >>>>>>>> 0.845688380 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[16]: 1617183856. Time to read "gps_time": >> > >>>>>>>> 1.129568096 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[17]: 1617183857. Time to read "gps_time": >> > >>>>>>>> 0.882436229 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[18]: 1617183858. Time to read "gps_time": >> > >>>>>>>> 1.168227593 >> > >>>>>>> seconds >> > >>>>>>>> gps_time[19]: 1617183859. Time to read "gps_time": >> > >>>>>>>> 0.881948247 >> > >>>>>>> seconds >> > >>>>>>>> >> > >>>>>>> >> > ---------------------------------------------------------------------- >> > ------------- >> > >>>>>>>> In the code you can find commented out the usual way to >> > >>>>>>>> access the sensor using multi_usrp and get_mboard_sensor. The >> > >>>>>>>> results are >> > >>>>>>> quite >> > >>>>>>>> similar. >> > >>>>>>>> >> > >>>>>>>> I wonder if anybody encountered this issue before or >> > >>>>>>>> addressed it >> > >>>>>>> in >> > >>>>>>>> any way. >> > >>>>>>>> I wonder why it takes so much time to get the value of GPS >> > >>>>>>>> time >> > >>>>>>> when >> > >>>>>>>> it is a simple parsing of an NMEA message coming from the GPS >> > >>>>>>> receiver. >> > >>>>>>>> >> > >>>>>>>> I am trying now various tricks to make the software robust >> > >>>>>>>> and >> > >>>>>>> immune >> > >>>>>>>> to this phenomenon. I can report my findings further if I >> > >>>>>>>> succeed >> > >>>>>>> to >> > >>>>>>>> find a workaround if there is any interest. >> > >>>>>>>> >> > >>>>>>>> Can anyone comment on this? Can this be resolved so that the >> > >>>>>>> reading >> > >>>>>>>> of gps_time will be much faster? >> > >>>>>>>> Is there another way to get GPS time faster indirectly? Maybe >> > >>>>>>>> from parsing NMEA messages ourselves? >> > >>>>>>>> >> > >>>>>>>> Regards, >> > >>>>>>>> Ofer Saferman >> > >>>>>>>> >> > >>>>>>> This probably has to do with the way that particular "sensor" >> > >>>>>>> works--the >> > >>>>>>> NMEA time value is only emitted once per second, and the >> > >>>>>>> code for that sensor has some heuristic for determining >> > >>>>>>> "freshness" >> > >>>>>>> of the value. >> > >>>>>>> >> > >>>>>>> I'll point out that on E310, the system is configured to use >> > >>>>>>> GPSD, >> > so >> > >>>>>>> that the Linux system time across several systems that have >> > >>>>>>> all >> > been >> > >>>>>>> "listening" to GPS for a while will all be synchronized >> > >>>>>>> quite >> > well. >> > >>>>>>> >> > >>>>>>> >> > >>>>>>> >> > >>>>>>> >> > >>>>>> -- >> > >>>>>> This message has been scanned for viruses and dangerous content >> > >>>>>> by *MailScanner* <http://www.mailscanner.info/>, and is >> > >>>>>> believed to be clean. >> > _______________________________________________ >> > >>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com To >> > >>>>>> unsubscribe send an email to usrp-users-le...@lists.ettus.com >> > >>>>>> >> > >>>>> _______________________________________________ >> > >>>> USRP-users mailing list -- usrp-users@lists.ettus.com To >> > >>>> unsubscribe send an email to usrp-users-le...@lists.ettus.com >> > >>>> >> > >>>> >> > >>> -- >> > >>> This message has been scanned for viruses and dangerous content by >> > >>> *MailScanner* <http://www.mailscanner.info/>, and is believed to >> > >>> be clean. >> > >>> >> > >>> >> > >> -- >> > >> This message has been scanned for viruses and dangerous content by >> > >> *MailScanner* <http://www.mailscanner.info/>, and >> > is >> > >> believed to be clean. >> > >> >> > >> >> > >> >> > > >> > > >> > > _______________________________________________ >> > > USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe >> > > send an email to usrp-users-le...@lists.ettus.com >> > > _______________________________________________ >> > USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe >> > send an email to usrp-users-le...@lists.ettus.com >> > >> >> -- >> This message has been scanned for viruses and dangerous content by >> MailScanner, and is believed to be clean. >> >> -------------- next part -------------- >> A message part incompatible with plain text digests has been removed ... >> Name: not available >> Type: text/html >> Size: 27834 bytes >> Desc: not available >> >> ------------------------------ >> >> Subject: Digest Footer >> >> _______________________________________________ >> USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe >> send an email to usrp-users-le...@lists.ettus.com >> >> >> ------------------------------ >> >> End of USRP-users Digest, Vol 128, Issue 7 >> ****************************************** >> > > _______________________________________________ > USRP-users mailing list -- usrp-users@lists.ettus.com > To unsubscribe send an email to usrp-users-le...@lists.ettus.com > > _______________________________________________ > USRP-users mailing list -- usrp-users@lists.ettus.com > To unsubscribe send an email to usrp-users-le...@lists.ettus.com >
_______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com