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 <mailto: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>
    [mailto: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 <mailto: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 <mailto: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
    <mailto:usrp-users-requ...@lists.ettus.com>

    You can reach the person managing the list at
    usrp-users-ow...@lists.ettus.com
    <mailto: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
    <mailto: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
    <mailto:patchvonbr...@gmail.com>>
    Cc: USRP-users@lists.ettus.com <mailto:USRP-users@lists.ettus.com>
    Message-ID:
           
    <calnmz8wg3gqnkaomrhhcbpagttfubm3fkmzjhcwhuaghrlu...@mail.gmail.com
    <mailto: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 <mailto: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
    <mailto: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
    <mailto:usrp-users@lists.ettus.com> To unsubscribe
    > send an email to usrp-users-le...@lists.ettus.com
    <mailto: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 <mailto:o...@navigicom.com>>
    Subject: [USRP-users] Re: Intermittent problem with GPS
            synchronization for multiple E310 units
    To: usrp-users <usrp-users@lists.ettus.com
    <mailto:usrp-users@lists.ettus.com>>
    Message-ID:
           
    <CACDReSwXUvJ8_LimfVOn4StHQEGhNntY-nCSv0aYdBsX=at...@mail.gmail.com
    <mailto: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
    <mailto:usrp-users-requ...@lists.ettus.com>> wrote:

    > Send USRP-users mailing list submissions to
    > usrp-users@lists.ettus.com <mailto: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
    <mailto:usrp-users-requ...@lists.ettus.com>
    >
    > You can reach the person managing the list at
    > usrp-users-ow...@lists.ettus.com
    <mailto: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
    <mailto:phi...@balister.org>>
    > To: Ofer Saferman <o...@navigicom.com
    <mailto:o...@navigicom.com>>, "Marcus D. Leech" <
    > patchvonbr...@gmail.com <mailto:patchvonbr...@gmail.com>>
    > Cc: Rob Kossler <rkoss...@nd.edu <mailto:rkoss...@nd.edu>>,
    usrp-users
    > <usrp-users@lists.ettus.com <mailto: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 <mailto: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 <mailto: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 <mailto: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 <mailto:patchvonbr...@gmail.com>>
    > >>> wrote:
    > >>>
    > >>>>
    > >>>>
    > >>>> Sent from my iPhone
    > >>>>
    > >>>> On Mar 31, 2021, at 2:22 PM, Rob Kossler <rkoss...@nd.edu
    <mailto: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 <mailto: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 <mailto: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
    <mailto:patchvonbr...@gmail.com>>
    > >>>>>>> To: usrp-users@lists.ettus.com
    <mailto: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
    <mailto:usrp-users@lists.ettus.com> To
    > >>>>>> unsubscribe send an email to
    usrp-users-le...@lists.ettus.com
    <mailto:usrp-users-le...@lists.ettus.com>
    > >>>>>>
    > >>>>> _______________________________________________
    > >>>> USRP-users mailing list -- usrp-users@lists.ettus.com
    <mailto:usrp-users@lists.ettus.com> To
    > >>>> unsubscribe send an email to
    usrp-users-le...@lists.ettus.com
    <mailto: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
    <mailto:usrp-users@lists.ettus.com> To unsubscribe
    > > send an email to usrp-users-le...@lists.ettus.com
    <mailto:usrp-users-le...@lists.ettus.com>
    > > _______________________________________________
    > USRP-users mailing list -- usrp-users@lists.ettus.com
    <mailto:usrp-users@lists.ettus.com> To unsubscribe
    > send an email to usrp-users-le...@lists.ettus.com
    <mailto: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
    <mailto:usrp-users@lists.ettus.com> To unsubscribe send an email
    to usrp-users-le...@lists.ettus.com
    <mailto: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

Reply via email to