diff options
author | Josh Blum <josh@joshknows.com> | 2010-06-15 17:54:37 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-06-15 17:54:37 -0700 |
commit | a89d684ba2b81c6e18d348965dffb919edb56fea (patch) | |
tree | eba14f717a227c9ebde668e723fae9c2281f0648 /host | |
parent | 25005946ad796c41d3108480eb2b3e39a68f24b2 (diff) | |
parent | ca6417739de4e5344325e96887dcdbf8311e265b (diff) | |
download | uhd-a89d684ba2b81c6e18d348965dffb919edb56fea.tar.gz uhd-a89d684ba2b81c6e18d348965dffb919edb56fea.tar.bz2 uhd-a89d684ba2b81c6e18d348965dffb919edb56fea.zip |
Merge branch 'sched'
Diffstat (limited to 'host')
-rw-r--r-- | host/docs/CMakeLists.txt | 1 | ||||
-rw-r--r-- | host/docs/general.rst | 79 | ||||
-rw-r--r-- | host/docs/index.rst | 3 | ||||
-rw-r--r-- | host/lib/CMakeLists.txt | 16 | ||||
-rw-r--r-- | host/lib/sched.cpp | 45 |
5 files changed, 143 insertions, 1 deletions
diff --git a/host/docs/CMakeLists.txt b/host/docs/CMakeLists.txt index 61eede8b7..d0041f71c 100644 --- a/host/docs/CMakeLists.txt +++ b/host/docs/CMakeLists.txt @@ -23,6 +23,7 @@ SET(manual_sources build.rst coding.rst dboards.rst + general.rst usrp2.rst ) diff --git a/host/docs/general.rst b/host/docs/general.rst new file mode 100644 index 000000000..7d1f467a0 --- /dev/null +++ b/host/docs/general.rst @@ -0,0 +1,79 @@ +======================================================================== +UHD - General Application Notes +======================================================================== + +.. contents:: Table of Contents + +------------------------------------------------------------------------ +Finding devices +------------------------------------------------------------------------ + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Device addressing +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Deviced are addressed through key/value string pairs. +These string pairs can be used to narrow down the search for a specific device or group of devices. +Most UHD utility applications and examples have a --args parameter that takes a device address; +where the device address is expressed as a delimited string. + +* See the documentation in types/device_addr.hpp for reference. +* See device-specific application notes for usage. + +**Example:** +:: + + serial=0x1234, type=usrpx + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Device discovery +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Devices attached to your system can be discovered using the "uhd_find_devices" program. +The find devices program scans your system for supported devices and prints +out an enumerated list of discovered devices and their addresses. +The list of discovered devices can be narrowed down by specifying device address args. + +**Usage:** +:: + + uhd_find_devices + + -- OR -- + + uhd_find_devices --args <device-specific-address-args> + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Device properties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Properties of devices attached to your system can be probed with the "uhd_usrp_probe" program. +The usrp probe program contructs an instance of the device and prints out its properties; +properties such as detected daughter-boards, frequency range, gain ranges, etc... + +**Usage:** +:: + + uhd_usrp_probe --args <device-specific-address-args> + +------------------------------------------------------------------------ +Misc notes +------------------------------------------------------------------------ + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Process scheduling +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The UHD will try to automatically boost the process's scheduling priority. +Currently, this is only supported on platforms with *sched.h*. + +When setting the priority fails, the UHD prints out an error. +This error is harmless, it simply means that your process will have a normal scheduling priority. + +**Linux Notes:** + +Non-privileged users need special permission to change the scheduling priority. +Add the following line to */etc/security/limits.conf*: +:: + + @<my_group> - rtprio 99 + +Replace <my_group> with a group to which your user belongs. +Settings will not take effect until the user has logged in and out. diff --git a/host/docs/index.rst b/host/docs/index.rst index 3dc7a2d98..b31a3d0ac 100644 --- a/host/docs/index.rst +++ b/host/docs/index.rst @@ -18,8 +18,9 @@ Building the UHD * `Build Guide <./build.html>`_ ^^^^^^^^^^^^^^^^^^^^^ -Supported Devices +Application Notes ^^^^^^^^^^^^^^^^^^^^^ +* `General App Notes <./general.html>`_ * `USRP2 App Notes <./usrp2.html>`_ * `Daughterboard App Notes <./dboards.html>`_ diff --git a/host/lib/CMakeLists.txt b/host/lib/CMakeLists.txt index 7b765b0d3..50787f6a2 100644 --- a/host/lib/CMakeLists.txt +++ b/host/lib/CMakeLists.txt @@ -74,6 +74,21 @@ INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/usrp/dboard/CMakeLists.txt) INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/usrp/usrp2/CMakeLists.txt) ######################################################################## +# Setup defines for process scheduling +######################################################################## +MESSAGE(STATUS "Configuring process scheduling...") + +INCLUDE(CheckIncludeFileCXX) +CHECK_INCLUDE_FILE_CXX(sched.h HAVE_SCHED_H) + +IF(HAVE_SCHED_H) + MESSAGE(STATUS " Process scheduling supported through sched_setscheduler.") + ADD_DEFINITIONS(-DHAVE_SCHED_H) +ELSE(HAVE_SCHED_H) + MESSAGE(STATUS " Process scheduling not supported.") +ENDIF(HAVE_SCHED_H) + +######################################################################## # Setup defines for module loading ######################################################################## MESSAGE(STATUS "Configuring module loading...") @@ -99,6 +114,7 @@ LIBUHD_APPEND_SOURCES( ${CMAKE_CURRENT_SOURCE_DIR}/device.cpp ${CMAKE_CURRENT_SOURCE_DIR}/gain_handler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/load_modules.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/sched.cpp ${CMAKE_CURRENT_SOURCE_DIR}/types.cpp ${CMAKE_CURRENT_SOURCE_DIR}/utils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/wax.cpp diff --git a/host/lib/sched.cpp b/host/lib/sched.cpp new file mode 100644 index 000000000..712014c9c --- /dev/null +++ b/host/lib/sched.cpp @@ -0,0 +1,45 @@ +// +// Copyright 2010 Ettus Research LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// + +#include <uhd/utils/static.hpp> +#include <stdexcept> +#include <iostream> + +#ifdef HAVE_SCHED_H +#include <sched.h> + +/* + * # /etc/security/limits.conf +# +@usrp - rtprio 99 +*/ + +UHD_STATIC_BLOCK(setup_process_sched){ + try{ + int policy = SCHED_RR; + int max_pri = sched_get_priority_max(policy); + if (max_pri == -1) throw std::runtime_error("sched_get_priority_max with SCHED_RR failed"); + sched_param sp; sp.sched_priority = max_pri; + int ss_ret = sched_setscheduler(0, policy, &sp); + if (ss_ret == -1) throw std::runtime_error("sched_setscheduler with SCHED_RR failed"); + } + catch(const std::exception &e){ + std::cerr << "Process scheduling error: " << e.what() << std::endl; + } +} + +#endif /* HAVE_SCHED_H */ |