Неверное распределение при попытке создать объект USRP в C++
Я получаю сообщение об ошибке - "неправильное распределение " при работе с библиотекой UHD.
Я пытаюсь скомпилировать базовый код, чтобы узнать больше о библиотеке UHD. После компиляции программы я получаю сообщение об ошибке.
Код:
int UHD_SAFE_MAIN(int argc, char *argv[]) {
uhd::set_thread_priority_safe();
std::string device_args("addr=192.168.10.2");
std::string subdev("A:0");
std::string ant("TX/RX");
std::string ref("internal");
double rate(1e6);
double freq(915e6);
double gain(10);
double bw(1e6);
//create a usrp device
std::cout << std::endl;
std::cout << boost::format("Creating the usrp device with: %s...") %device_args << std::endl;
uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(device_args);
// Lock mboard clocks
std::cout << boost::format("Lock mboard clocks: %f") % ref << std::endl;
usrp->set_clock_source(ref);
//always select the subdevice first, the channel mapping affects the other settings
std::cout << boost::format("subdev set to: %f") % subdev << std::endl;
usrp->set_rx_subdev_spec(subdev);
std::cout << boost::format("Using Device: %s") % usrp->get_pp_string() << std::endl;
//set the sample rate
if (rate <= 0.0) {
std::cerr << "Please specify a valid sample rate" << std::endl;
return ~0;
}
// set sample rate
std::cout << boost::format("Setting RX Rate: %f Msps...") % (rate / 1e6) << std::endl;
usrp->set_rx_rate(rate);
std::cout << boost::format("Actual RX Rate: %f Msps...") % (usrp->get_rx_rate() / 1e6) << std::endl << std::endl;
// set freq
std::cout << boost::format("Setting RX Freq: %f MHz...") % (freq / 1e6) << std::endl;
uhd::tune_request_t tune_request(freq);
usrp->set_rx_freq(tune_request);
std::cout << boost::format("Actual RX Freq: %f MHz...") % (usrp->get_rx_freq() / 1e6) << std::endl << std::endl;
// set the rf gain
std::cout << boost::format("Setting RX Gain: %f dB...") % gain << std::endl;
usrp->set_rx_gain(gain);
std::cout << boost::format("Actual RX Gain: %f dB...") % usrp->get_rx_gain() << std::endl << std::endl;
// set the IF filter bandwidth
std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % (bw / 1e6) << std::endl;
usrp->set_rx_bandwidth(bw);
std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % (usrp->get_rx_bandwidth() / 1e6) << std::endl << std::endl;
// set the antenna
std::cout << boost::format("Setting RX Antenna: %s") % ant << std::endl;
usrp->set_rx_antenna(ant);
std::cout << boost::format("Actual RX Antenna: %s") % usrp->get_rx_antenna() << std::endl << std::endl;
return EXIT_SUCCESS;
}
Часть кода, где возникает ошибка:
//create a usrp device
std::cout << std::endl;
std::cout << boost::format("Creating the usrp device with: %s...") %device_args << std::endl;
uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(device_args);
Ошибка: введите описание изображения здесь
Я использую:
- Microsoft Visual C++ Express 2010
- Язык C++
- Библиотека UHD, Win32_VS2010.exe, выпуск 003.007.003
- Библиотека повышения 1_63_0
- Я не подключаю ни одно устройство URSP к своему компьютеру.
Я не знаю, связана ли ошибка с библиотекой UHD или с языком C++. Я пытался скомпилировать эту программу, используя разные версии Microsoft Visual Studio и разные версии библиотеки UHD, включая последнюю. Я даже пытался скомпилировать это на другом ПК, но результат был похожим, не было ошибки, которая прервала программу, но вместо этого я получил строку "ошибка: неправильное размещение" в консоли, и программа перестала работать в том же месте.
Когда я впервые начал компилировать эту программу, у меня не было "ошибки неправильного размещения" (UHD_003.004.000 - выпуск). Я получил сообщение об ошибке: " Ошибка: LookupError: KeyError: не найдено устройство для ----->. После этого я решил обновить версию своей библиотеки UHD до более новой (003.007.003), а затем началась ошибка неправильного размещения. Я пытался установить предыдущую версию, но это не помогло.
Я пытался изменить тип device_args, со строки на uhd:: device_addr_t, как сказано в руководстве на http://files.ettus.com/manual, но ошибка не исчезла.
Любая помощь будет оценена.
1 ответ
"Я не подключаю никакое устройство URSP к своему компьютеру".
Вы не можете выполнить этот код, не подключив USRP к компьютеру, на котором он запущен.
когда вы вызываете uhd::usrp::multi_usrp::make(device_args); UHD пытается подключиться к USRP с IP-адресом, который вы указали в параметрах устройства.
попробуйте подключить usrp к вашему компьютеру и попробуйте снова