2017-01-25 9 views
-2

Je reçois une erreur - "mauvaise affectation" lors de l'utilisation de la bibliothèque UHD.Mauvaise allocation lors de la tentative de création d'un objet USRP en C++

J'essaie de compiler du code de base pour en savoir plus sur la bibliothèque UHD. Après avoir compilé le programme, je reçois une erreur.

code:

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; 

}

Une partie du code où l'erreur se produit:

//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); 

Erreur: enter image description here

J'utilise:

  • Microsoft Visual C++ Express 2010
  • langage C++
  • bibliothèque UHD, Win32_VS2010.exe, 003.007.003 libération
  • bibliothèque Boost 1_63_0
  • Je ne connecte aucun dispositif de URSP à mon ordinateur. Je ne sais pas si l'erreur est liée à la bibliothèque UHD ou avec le langage C++

J'essayais de compiler ce programme en utilisant différentes versions de Microsoft Visual Studio et différentes versions de la bibliothèque UHD, y compris la dernière version. J'essayais même de compiler ceci sur différents PC, mais le résultat était similaire, il n'y avait pas une erreur qui interrompait le programme mais j'ai eu une erreur "error: mauvaise allocation" dans la console et le programme a cessé de fonctionner au même endroit. Lorsque j'ai commencé à compiler ce programme, je n'ai pas eu de "mauvaise erreur d'allocation" (UHD_003.004.000 - version)

J'ai eu une erreur qui a dit - "Erreur: LookupError: KeyError: Aucun appareil trouvé pour -----> Après que j'ai décidé de mettre à jour ma version de la bibliothèque UHD à la plus récente (003.007.003), puis mauvaise allocation erreur commencé survenant. Je cherchais à installer revenir à la version précédente, mais il n'a pas aidé.

je tente de changer le type de device_args, de chaîne-UHD :: device_addr_t, comme il est dit dans le manuel sur http://files.ettus.com/manual, mais l'erreur n'a pas disparu

Toute aide serait appréciée.

Répondre

0

"Je ne connecte aucun périphérique URSP à mon ordinateur."

Vous ne pouvez pas exécuter ce code sans avoir connecté un USRP à l'ordinateur sur lequel vous l'exécutez.

lorsque vous appelez uhd :: usrp :: multi_usrp :: make (device_args); le uhd essaie de se connecter à un USRP avec l'adresse IP que vous avez spécifiée dans les arguments de l'appareil.

essayez de connecter un usrp à votre ordinateur et réessayez