-1

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 ライブラリを使用して、このプログラムをコンパイルしようとしていました。これを別のPCでコンパイルしようとしても、結果は同様で、プログラムを中断するエラーはありませんでしたが、代わりにコンソールに「エラー:割り当てが正しくありません」という文字列が表示され、プログラムは同じ場所で動作を停止しました。

このプログラムを最初にコンパイルし始めたとき、「不正な割り当てエラー」( UHD_003.004.000 - release ) は発生しませんでした。「Error: LookupError: KeyError: No device found for -----> . その後、UHD ライブラリのバージョンを新しいバージョン (003.007.003) にアップグレードすることにしましたが、不正な割り当てエラーが発生しました。以前のバージョンをインストールし直そうとしましたが、役に立ちませんでした。

http://files.ettus.com/manualのマニュアルに記載されているように、 device_args のタイプstringからuhd::device_addr_tに変更しようとしましたが、エラーは消えませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1