- Timestamp:
- May 22, 2009, 6:18:06 PM (16 years ago)
- Location:
- trunk/AddOn/TAcq
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/brpaqu.cc
r3625 r3626 483 483 lostframes += (unsigned long long)delfc - 1; 484 484 if (delfc != 1) { 485 cnt_pb++; 486 if (cnt_pb < 5) paq.Print(); 485 cnt_pb++; 486 if (cnt_pb < 5) { 487 cout << "BRPaqChecker::Check([NumFrameOK=" << nframeok 488 << ")/Debug FrameCounter Cur=" << curfc 489 << " Last=" << frclst << " -> delta=" << delfc << endl; 490 paq.Print(); 491 } 487 492 } 488 493 } -
trunk/AddOn/TAcq/pciewrap.cc
r3625 r3626 48 48 bp[kk] = (Byte)(sin(0.0345*kk)*78.+127.5); 49 49 */ 50 for(UInt32 kk=0; kk<paq.DataSize(); kk++) 50 UInt32 kkmax = paq.DataSize(); 51 for(UInt32 kk=0; kk<kkmax; kk++) 51 52 bp[kk] = (Byte)(kk%200+20); 52 53 tottransfer_ += size_; -
trunk/AddOn/TAcq/racqumem.cc
r3623 r3626 6 6 //---------------------------------------------------------------- 7 7 8 8 /* --Methode-- */ 9 9 RAcqMemZoneMgr::RAcqMemZoneMgr(uint_4 nz, uint_4 np, uint_4 psz) 10 10 : mex(true), nzones(nz), npaq(np), paqsz(psz), stop_(false) … … 12 12 St_MemZ st; 13 13 14 st.serial = 0; 14 15 st.act = (uint_4)MemZA_None; 15 st.stat = (uint_ 8)MemZS_Free;16 for(int k=0; k< 3; k++) st.nbact[k] = 0;16 st.stat = (uint_4)MemZS_Free; 17 for(int k=0; k<6; k++) st.nbact[k] = 0; 17 18 uint_8 mzsz = npaq*paqsz; 18 19 … … 21 22 states.push_back(st); 22 23 } 23 24 serial_ = 0; 25 SetFinalizedMask(); 24 26 } 25 27 28 /* --Methode-- */ 26 29 RAcqMemZoneMgr::~RAcqMemZoneMgr() 27 30 { … … 29 32 } 30 33 34 /* --Methode-- */ 31 35 int RAcqMemZoneMgr::FindMemZoneId(MemZaction act) 36 // Recherche et renvoie une zone memoire compatible pour effectuer l'operation act 37 // Pour act = MemZA_Fill : Zone vide ou satisfaisant la condition mask_finalized_ 38 // On recherche a chaque fois la zone ayant le plus petit numero de serie 39 // cad le numero d'ordre de remplissage 40 // Pour ProcA/B/C on attend que la zone avec le plus petit numero soit disponible 41 32 42 { 33 43 int rid = -1; … … 35 45 if ((act != MemZA_Fill) && (act != MemZA_Save) && (act != MemZA_Proc)) return rid; 36 46 mex.lock(); 47 uint_8 bestserial = serial_ + 5; 37 48 while ((rid < 0)&&(!stop_)) { 38 switch (act) 39 { 49 switch (act) { 40 50 case MemZA_Fill: 41 51 if (rid < 0) for(uint_4 k=0; k<NbZones(); k++) { 42 52 if ((states[k].act == MemZA_None) && 43 ((states[k].stat == MemZS_Free)||(states[k].stat & MemZS_Saved)) ) 44 { rid = k; break; } 53 ((states[k].stat == MemZS_Free)||(states[k].stat & mask_finalized_)) ) { 54 if (states[k].serial < bestserial) { rid=k; bestserial=states[k].serial; } 55 } 45 56 } 46 57 if (rid >= 0) { states[rid].act = MemZA_Fill; states[rid].stat = MemZS_Free; } … … 48 59 case MemZA_Save: 49 60 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; } 61 if ((states[k].act == MemZA_None) && 62 (states[k].stat & MemZS_Filled) && !(states[k].stat & MemZS_Saved) ) { 63 if (states[k].serial < bestserial) { rid=k; bestserial=states[k].serial; } 64 } 52 65 } 53 66 if (rid >= 0) states[rid].act = MemZA_Save; … … 55 68 case MemZA_Proc: 56 69 for(uint_4 k=0; k<NbZones(); k++) { 70 if ((states[k].act == MemZA_None) && 71 (states[k].stat & MemZS_Filled) && !(states[k].stat & MemZS_Proc) ) { 72 if (states[k].serial < bestserial) { rid=k; bestserial=states[k].serial; } 73 } 74 } 75 if (rid >= 0) states[rid].act = MemZA_Proc; 76 break; 77 case MemZA_ProcA: 78 for(uint_4 k=0; k<NbZones(); k++) { 57 79 if ((states[k].act == MemZA_None) && (states[k].stat & MemZS_Filled) && 58 !(states[k].stat & MemZS_Proc) ) { rid = k; break; } 80 !(states[k].stat & MemZS_ProcA) ) { 81 if (states[k].serial < bestserial) { rid=k; bestserial=states[k].serial; } 82 } 59 83 } 60 if (rid >= 0) states[rid].act = MemZA_Proc; 84 if (rid >= 0) states[rid].act = MemZA_ProcA; 85 break; 86 case MemZA_ProcB: 87 for(uint_4 k=0; k<NbZones(); k++) { 88 if ((states[k].act == MemZA_None) && (states[k].stat & MemZS_Filled) && 89 (states[k].stat & MemZS_ProcA) && !(states[k].stat & MemZS_ProcB) ) { 90 if (states[k].serial < bestserial) { rid=k; bestserial=states[k].serial; } 91 } 92 } 93 if (rid >= 0) states[rid].act = MemZA_ProcB; 94 break; 95 case MemZA_ProcC: 96 for(uint_4 k=0; k<NbZones(); k++) { 97 if ((states[k].act == MemZA_None) && (states[k].stat & MemZS_Filled) && 98 (states[k].stat & MemZS_ProcB) && !(states[k].stat & MemZS_ProcC) ) { 99 if (states[k].serial < bestserial) { rid=k; bestserial=states[k].serial; } 100 } 101 } 102 if (rid >= 0) states[rid].act = MemZA_ProcC; 61 103 break; 62 104 case MemZA_None: // MTQ pour supprimer un warning 63 105 break; 64 } 106 } // Fin de switch 65 107 if (rid < 0) mex.wait(); 66 } 108 } // Fin de while 67 109 mex.unlock(); 68 110 return rid; 69 111 } 70 112 113 /* --Methode-- */ 71 114 int RAcqMemZoneMgr::FreeMemZone(int id, MemZStatus st) 72 115 { … … 75 118 mex.lock(); 76 119 switch (st) { 77 case MemZS_Free : 78 states[id].stat = MemZS_Free; 79 states[id].act = MemZA_None; 80 break; 81 case MemZS_Filled : 82 if (states[id].act != MemZA_Fill) rc = 2; 83 else states[id].nbact[0]++; 84 states[id].stat |= MemZS_Filled; 85 states[id].act = MemZA_None; 86 break; 87 case MemZS_Saved : 88 if (states[id].act != MemZA_Save) rc = 4; 89 else states[id].nbact[1]++; 90 states[id].stat |= MemZS_Saved; 91 states[id].act = MemZA_None; 92 break; 93 case MemZS_Proc : 94 if (states[id].act != MemZA_Proc) rc = 8; 95 else states[id].nbact[2]++; 96 states[id].stat |= MemZS_Proc; 97 states[id].act = MemZA_None; 98 break; 99 default : 100 rc = 16; 101 states[id].stat = MemZS_Free; 102 states[id].act = MemZA_None; 103 break; 104 } 120 case MemZS_Free : 121 states[id].serial = 0; 122 states[id].stat = MemZS_Free; 123 states[id].act = MemZA_None; 124 break; 125 case MemZS_Filled : 126 if (states[id].act != MemZA_Fill) rc = 2; 127 else states[id].nbact[0]++; 128 serial_ ++; 129 states[id].serial = serial_; 130 states[id].stat |= MemZS_Filled; 131 states[id].act = MemZA_None; 132 break; 133 case MemZS_Saved : 134 if (states[id].act != MemZA_Save) rc = 4; 135 else states[id].nbact[1]++; 136 states[id].stat |= MemZS_Saved; 137 states[id].act = MemZA_None; 138 break; 139 case MemZS_Proc : 140 if (states[id].act != MemZA_Proc) rc = 8; 141 else states[id].nbact[2]++; 142 states[id].stat |= MemZS_Proc; 143 states[id].act = MemZA_None; 144 break; 145 case MemZS_ProcA : 146 if (states[id].act != MemZA_ProcA) rc = 16; 147 else states[id].nbact[3]++; 148 states[id].stat |= MemZS_ProcA; 149 states[id].act = MemZA_None; 150 break; 151 case MemZS_ProcB : 152 if (states[id].act != MemZA_ProcB) rc = 32; 153 else states[id].nbact[4]++; 154 states[id].stat |= MemZS_ProcB; 155 states[id].act = MemZA_None; 156 break; 157 case MemZS_ProcC : 158 if (states[id].act != MemZA_ProcC) rc = 64; 159 else states[id].nbact[4]++; 160 states[id].stat |= MemZS_ProcC; 161 states[id].act = MemZA_None; 162 break; 163 default : 164 rc = 128; 165 states[id].serial = 0; 166 states[id].stat = MemZS_Free; 167 states[id].act = MemZA_None; 168 break; 169 } // Fin de switch 105 170 mex.unlock(); 106 171 mex.broadcast(); … … 121 186 for(uint_4 k=0; k<states.size(); k++) 122 187 os << " [" << k << "] Act=" << states[k].act << " Stat=" << states[k].stat 123 << " NbAct[0..2]=" << states[k].nbact[0] << "," << states[k].nbact[1] 124 << "," << states[k].nbact[2] << endl; 188 << " NbAct[0..5]=" << states[k].nbact[0] << "," << states[k].nbact[1] 189 << "," << states[k].nbact[2] << "," << states[k].nbact[3] 190 << "," << states[k].nbact[4] << "," << states[k].nbact[5] << endl; 125 191 return os; 126 192 } -
trunk/AddOn/TAcq/racqumem.h
r3623 r3626 5 5 // ---- classes de gestion memoire pour acquisition BAORadio ----- 6 6 // LAL - R. Ansari - Juin/Juillet 2008 7 // Modifs Mai 2009 8 // - Introduction du numero d'ordre de remplissage 9 // - Introduction de mask de recyclage et sequence de traitement procA/B/C 7 10 //---------------------------------------------------------------- 8 11 … … 21 24 // Structure de gestion utilisee par la classe RAcqMemMgr 22 25 typedef struct { 23 uint_4 act; 24 uint_4 stat; 25 uint_4 nbact[3]; 26 // int tid; 26 uint_8 serial; // Numero de serie permettant d'ordonner en temps les zones memoire rempli 27 uint_4 act; // Indique l'action en cours sur une zone Fill,Save ... 28 uint_4 stat; // Champ de flag (bits) indiquant les operations effectuees sur la zone 29 uint_4 nbact[6]; // compteurs nb de fois ou (fill,save,proc,procA/B/C) a ete effectuee sur la zone 30 // int tid; Pas utilise pour le moment, permet l'identification du thread operant sur la zone 27 31 } St_MemZ; 28 32 29 enum MemZStatus { MemZS_Free=0, MemZS_Filled=1, MemZS_Saved=2, MemZS_Proc=4 }; 30 enum MemZaction { MemZA_None=0, MemZA_Fill=1, MemZA_Save=2, MemZA_Proc=4}; 33 // Les flags (bits) correspondant aux operations effectuees sur une zone 34 // Free->libre, Filled->rempli(par DMA), Saved(ecrit sur disque), Proc(Traitement) 35 // ProcA/B/C : Trois traitement qui doivent s'enchainer 36 enum MemZStatus { MemZS_Free=0, MemZS_Filled=1, MemZS_Saved=2, MemZS_Proc=4, 37 MemZS_ProcA=8, MemZS_ProcB=16, MemZS_ProcC=32 }; 38 // L'action en cours sur une zone 39 enum MemZaction { MemZA_None=0, MemZA_Fill=1, MemZA_Save=2, MemZA_Proc=4, 40 MemZA_ProcA=8, MemZA_ProcB=16, MemZA_ProcC=32 }; 31 41 32 42 // ------------------------------------------------------------------- 33 // Structure de gestion de zones memoire partagee (des vecteurs) entre43 // Classe de gestion de zones memoire partagee (des buffers) entre 34 44 // threads - qui doivent operer successivement sur les vecteurs 35 45 // ------------------------------------------------------------------- 36 46 class RAcqMemZoneMgr { 37 47 public: 38 // Constructeur, classe dma,nz=Nb de zones, np=Nb de paquets/zone , psz=taille de paquet39 RAcqMemZoneMgr(uint_4 nz, uint_4 np= 1000, uint_4 psz=4096);48 // Constructeur, nz=Nb de zones, np=Nb de paquets/zone , psz=taille de paquet 49 RAcqMemZoneMgr(uint_4 nz, uint_4 np=256, uint_4 psz=4096); 40 50 ~RAcqMemZoneMgr(); 41 51 … … 49 59 inline uint_4 ZoneSize() { return npaq*paqsz; } 50 60 61 // Definit l'etat des operations obligatoires avant qu'une zone 62 // remplie ne puisse etre recyclee (re-remplie) 63 inline uint_4 SetFinalizedMask(uint_4 mask=((uint_4)MemZS_Saved)) 64 { mask_finalized_ = mask; } 65 inline uint_4 GetFinalizedMask() { return mask_finalized_; } 51 66 52 67 // Retourne un MemZone disponible pour une action specifique … … 71 86 vector< St_MemZ > states; 72 87 bool stop_; 88 uint_4 mask_finalized_; 89 uint_8 serial_; 73 90 }; 74 91
Note:
See TracChangeset
for help on using the changeset viewer.