notes: pointer's pointer **p


  looper_type& selecte_looper(sequencer_type& seqer);
  looper_type* selecte_looper(sequencer_type& seqer,const std::string& looper_name);
  void update_sequencer_fullness(sequencer_type& seqer,size_t& emptiest_lper_index);
  //output
  bool check_pkg_available(sequencer_type& seqer,const package_type& opt_pkg,looper_type **opt_lper);
  
   

//void Resequencer::selecte_looper(sequencer_type& seqer,looper_type** lper)
looper_type& Resequencer::selecte_looper(sequencer_type& seqer)
{//make sure sequencer is not full before call this func
  //find the emptiest looper 
  //and return by lper
  size_t lper_index = 0;
  if(seqer.looper_vec.size() > 1)
    update_sequencer_fullness(seqer,lper_index);

  //std::cout << "selecte_looper address: " << &(seqer.looper_vec[lper_index]) << std::endl;
  //std::cout << "selecte_looper" << &(lper) << std::endl;
  std::cout << "selecte_looper:" << seqer.looper_vec[lper_index].lper_name<< std::endl;
  return seqer.looper_vec[lper_index];
}

//looper_type& Resequencer::selecte_looper(sequencer_type& seqer,const std::string& looper_name)
looper_type* Resequencer::selecte_looper(sequencer_type& seqer,const std::string& looper_name)
{//make sure sequencer is not full before call this func
  //and return by lper
  size_t lper_index = 0;
  if(seqer.looper_vec.size() > 1)
  {
    for(auto& it : seqer.looper_vec)
    {
      if(it.lper_name == looper_name)
        break;
      lper_index++;
    }
  }
  //std::cout << "selecte_looper address: " << &(seqer.looper_vec[lper_index]) << std::endl;
  //return  seqer.looper_vec[lper_index];
  return  &(seqer.looper_vec[lper_index]);
}

void Resequencer::update_sequencer_fullness(sequencer_type& seqer,size_t& emptiest_lper_index)
{
  //find the emptiest looper index
  //and return by emptiest_lper_index
  emptiest_lper_index = 0;
  auto& emptiness_v = seqer.emptiness_vec;
  auto& looper_v = seqer.looper_vec;
  size_t emptiest = 0;
  size_t lper_count = emptiness_v.size();
  //just includes 1 looper
  if(1 == lper_count && 0 == emptiest)
    seqer.full = true;

  //includes >1 looper
  for(size_t i = 0;i < lper_count;i++)
  {//compare emptiness of all looper
    //buble sort to find the emptiest
    if(emptiest < emptiness_v[i])
    {
      emptiest_lper_index = i;
      emptiest = emptiness_v[i];
    }
  }
  if(0 == emptiest)
    seqer.full = true;

  seqer.full = false;
  std::cout << "emptiest: "<<emptiest
    << "emptiest_lper_index: " <<emptiest_lper_index
    <<" looper_name:" << looper_v[emptiest_lper_index].lper_name
    <<std::endl;
}

//output
bool Resequencer::check_pkg_available(sequencer_type& seqer,const package_type& opt_pkg,looper_type **opt_lper)
{//check pkg from pkg_pool_map_,and return a looper by opt_lper
  for(auto& it : pkg_pool_map_)
  {
    auto lper_name = it.first;
    auto pkg_info_vec = it.second;
    for(auto& piv_it : pkg_info_vec)
    {//TODO:map
      if(piv_it.pkg == opt_pkg)
      {//TODO:bug
        //looper_type& opt_lper= selecte_looper(seqer,lper_name);
        //opt_lper = &(selecte_looper(seqer,lper_name));
        *opt_lper = selecte_looper(seqer,lper_name);
        //std::cout << "check_pkg_available: value of *opt_lper: "<<(*opt_lper)<<std::endl;
        //std::cout << "check_pkg_available: addressof &opt_lper: "<<&(opt_lper)<<std::endl;
        //std::cout << "check_pkg_available: addressof &*opt_lper: "<<&(*opt_lper)<<std::endl;
        //std::cout << "check_pkg_available: addressof &**opt_lper: "<<&(**opt_lper)<<std::endl;
        return true;
      }
    }
  }
  return false;
}


//usage
main()
{
 //check if pkg_pool includes a target pkg
    looper_type* opt_lper_p = nullptr;
    looper_type** opt_lper_pt = &opt_lper_p;
    //std::cout << "resequence : before check addressof &*opt_lper_p: "<<&(*opt_lper_p)<<std::endl;

    if(true == check_pkg_available(seqer,opt_pkg,opt_lper_pt))
    {// get the output looper
      if( opt_lper_pt != nullptr )
        //if( *opt_lper_p == nullptr )
      {
        looper_type& opt_lper = *opt_lper_p;
        //std::cout << " resequence: after addressof &*opt_lper_pt: "<<&(*opt_lper_p)<<std::endl;
        //print_sequencer_unit(*opt_lper_p);
        print_sequencer_unit(opt_lper);

        //check if a package can be release immediately
        std::cout <<"opt_pkg=====:"<<opt_pkg<< std::endl;
        if(true == check_pkg_releasable(opt_lper,opt_pkg)) 
        {
          release_pkg_from_looper(opt_lper,opt_pkg);
          update_loopers_info_map(seqer,opt_lper.lper_name);
          give_pkg_done(output_seq, opt_pkg);
          succeed_pkg_count_++;
        }else{
          //statistic dispatch expense
          std::cout<< "pkg available,but not releasable\n";
        }
      }
    }
 }
当出现"TOOLS.INI: TOOLCHAIN NOT INSTALLED"错误时,一种可能的原因是安装文件夹中的"TOOLS.INI"文件没有正确配置。可以通过以下步骤解决这个问题: 1. 首先确认Keil软件是否能够正常使用。如果可以正常使用,那么安装本身应该是正确的,问题可能出现在"TOOLS.INI"文件中。 2. 打开"TOOLS.INI"文件,可以通过在安装文件夹中搜索找到它。 3. 确保在"TOOLS.INI"文件中包含了[C51]这一项的配置。如果没有,需要手动添加该项。 4. 在[C51]项中添加以下内容: PATH="安装文件夹路径\C51\" VERSION=软件的版本 BOOK0=HLP\Release_Notes.htm("Release Notes",GEN) BOOK1=HLP\C51TOOLS.chm("Complete User's Guide Selection",C) TDRV0=BIN\MON51.DLL("Keil Monitor-51 Driver") TDRV1=BIN\ISD51.DLL("Keil ISD51 In-System Debugger") TDRV2=BIN\MON390.DLL("MON390: Dallas Contiguous Mode") TDRV3=BIN\LPC2EMP.DLL("LPC900 EPM Emulator/Programmer") TDRV4=BIN\UL2UPSD.DLL("ST-uPSD ULINK Driver") TDRV5=BIN\UL2XC800.DLL("Infineon XC800 ULINK Driver") TDRV6=BIN\MONADI.DLL("ADI Monitor Driver") TDRV7=BIN\DAS2XC800.DLL("Infineon DAS Client for XC800") TDRV8=BIN\UL2LPC9.DLL("NXP LPC95x ULINK Driver") RTOS0=Dummy.DLL("Dummy") RTOS1=RTXTINY.DLL("RTX-51 Tiny") RTOS2=RTX51.DLL("RTX-51 Full") 通过以上步骤,应该能够解决"TOOLS.INI: TOOLCHAIN NOT INSTALLED"错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [注册Keil软件时出现“ TOOLS.INI: TOOLCHAIN NOT INSTALLED ”的解决办法](https://blog.csdn.net/qq_45725659/article/details/107707741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [解决 keil 注册中出现 *** TOOLS.INI: TOOLCHAIN NOT INSTALLED ***办法](https://blog.csdn.net/xing414736597/article/details/48369221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值