Changeset 3623 in Sophya for trunk/AddOn/TAcq/racqumem.cc


Ignore:
Timestamp:
May 22, 2009, 9:59:38 AM (16 years ago)
Author:
ansari
Message:

Modifications et ameliorations diverses pour programme acquisition/traitement multifibres

Reza 22/05/2009

1- Extension/amelioration classe BRPaquet et BRPaqChecker
2- Correction BUG dans RAcqMemZoneMgr bloquant l'utilisation a une seule zone memoire
3- Classe PCIEWrapper devenue virtuelle pure et introduction de la classe TestPCIWrapperNODMA
pour les smulations.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/racqumem.cc

    r3538 r3623  
    88
    99RAcqMemZoneMgr::RAcqMemZoneMgr(uint_4 nz, uint_4 np, uint_4 psz)
    10   :  mex(true), nzones(nz), npaq(np), paqsz(psz), stop_(false)
     10  : mex(true), nzones(nz), npaq(np), paqsz(psz), stop_(false)
    1111{
    1212  St_MemZ st;
     13
    1314  st.act = (uint_4)MemZA_None;
    1415  st.stat = (uint_8)MemZS_Free;
     
    1617  uint_8 mzsz = npaq*paqsz;
    1718
    18   for(int k=0; k<NbZones(); k++) {
    19         memzones.push_back(new Byte[mzsz] );
    20         states.push_back(st);
    21   }     
     19   for(int k=0; k<NbZones(); k++) {
     20     memzones.push_back(new Byte[mzsz] );
     21     states.push_back(st);
     22   }
     23 
    2224}
    2325
     
    3436  mex.lock();
    3537  while ((rid < 0)&&(!stop_)) {
    36     switch (act) {
    37           case MemZA_Fill:
    38             for(int k=0; k<NbZones(); k++) {
    39               if ((states[k].act == MemZA_None) &&
    40                   ((states[k].stat == MemZS_Free)||(states[k].stat & MemZS_Saved)) )
    41                     rid = k; break;
    42             }
    43             if (rid >= 0) { states[rid].act = MemZA_Fill; states[rid].stat = MemZS_Free; }
    44           break;
    45           case MemZA_Save:
    46             for(int k=0; k<NbZones(); k++) {
    47               if ((states[k].act == MemZA_None) && (states[k].stat & MemZS_Filled) &&
    48                   !(states[k].stat & MemZS_Saved) )  rid = k; break;
    49             }
    50             if (rid >= 0) states[rid].act = MemZA_Save;
    51           break;
    52           case MemZA_Proc:
    53             for(int k=0; k<NbZones(); k++) {
    54               if ((states[k].act == MemZA_None) && (states[k].stat & MemZS_Filled) &&
    55                   !(states[k].stat & MemZS_Proc) )  rid = k; break;
    56             }
    57             if (rid >= 0) states[rid].act = MemZA_Proc;                   
    58           break;
    59     }
    60     if (rid < 0) mex.wait();
     38    switch (act)
     39      {
     40      case MemZA_Fill:
     41        if (rid < 0) for(uint_4 k=0; k<NbZones(); k++) {
     42          if ((states[k].act == MemZA_None) &&
     43              ((states[k].stat == MemZS_Free)||(states[k].stat & MemZS_Saved)) )
     44            { rid = k; break; }
     45        }
     46        if (rid >= 0) { states[rid].act = MemZA_Fill; states[rid].stat = MemZS_Free; }
     47        break;
     48      case MemZA_Save:
     49        for(uint_4 k=0; k<NbZones(); k++) {
     50          if ((states[k].act == MemZA_None) && (states[k].stat & MemZS_Filled) &&
     51              !(states[k].stat & MemZS_Saved) ) { rid = k; break; }
     52        }
     53        if (rid >= 0) states[rid].act = MemZA_Save;
     54        break;
     55      case MemZA_Proc:
     56        for(uint_4 k=0; k<NbZones(); k++) {
     57          if ((states[k].act == MemZA_None) && (states[k].stat & MemZS_Filled) &&
     58              !(states[k].stat & MemZS_Proc) ) { rid = k; break; }
     59        }
     60        if (rid >= 0) states[rid].act = MemZA_Proc;               
     61        break;
     62      case MemZA_None:   // MTQ pour supprimer un warning
     63        break;
     64      }
     65    if (rid < 0)  mex.wait();
    6166  }
    6267  mex.unlock();
     
    6671int RAcqMemZoneMgr::FreeMemZone(int id, MemZStatus st)
    6772{
    68   if ((id < 0) || (id >= states.size()))  return 1;
     73  if ((id < 0) || (id >= (int)states.size()))  return 1;
    6974  int rc = 0;
    7075  mex.lock();
     
    114119  os << "RAcqMemZoneMgr::Print() NbZones=" << NbZones() << " PaqSize()=" << PaqSize()
    115120     << " NbPaquets()=" << NbPaquets() << " ZoneSize()=" << ZoneSize() << endl;
    116   for(int k=0; k<states.size(); k++)
     121  for(uint_4 k=0; k<states.size(); k++)
    117122    os << " [" << k << "] Act=" << states[k].act << " Stat=" << states[k].stat
    118123       << " NbAct[0..2]=" << states[k].nbact[0] << "," << states[k].nbact[1]
     
    123128void RAcqMemZoneMgr::Stop()
    124129{
     130  //  cout << "RAcqMemZoneMgr::Stop() ........ STOP                          BROADCAST" <<endl;
    125131  stop_ = true;
    126132  mex.broadcast();
Note: See TracChangeset for help on using the changeset viewer.