On 9/26/07, Dragos Popescu <[EMAIL PROTECTED]> wrote: > Am un sistem embedded cu un linux pe el, cu kernel 2.4.21 şi procesor > StrongARM-1110. La sistemul ăsta am conectate nişte plăci de achiziţie > analog/digitale cu care încerc să măsor nişte tensiuni şi curenţi de la > reţea (50Hz adicătelea). > Trebuie să iau 32 de eşantioane pe fiecare alternanţă (la fiecare 625 > microsecunde), după care fac eu p'acolo FFT-uri, nebunii, alea, alea. > > Pentru prelevarea eşantioanelor am setat un timer aşa cum se vede în > progrămelul de mai jos (scuze de lungimea postului), numai că > rezultatul e dezastruos: dacă măsor o tensiune costantă, rezultatul > întors e corect cu o precizie mai mult decât mulţumitoare, dacă măsor o > tensiune alternativă, am pus-o! Şi asta din cauza timer-ului care numai > la 625us nu bate şi când aplic prelucrările numerice asupra > eşantioanelor, iese o poezie! > Nu se pune problema vitezei de eşantionare a plăcilor de achiziţie, alea > merg lejer la 200k măsurători/sec. > Cum aş putea rezolva cât de cât problema asta cu timerul? > Am încercat "nice" da' linuxul de la sistemul ăsta n-a auzit de aşa > ceva. >
Eu nu prea am experienta dar lucrez la o firma unde se fac chestii cam de genul asta (achizitie de semnale si prelucrare in timp real). Pot sa-ti dau citeva idei: 1. Nu vrei sa prelucrezi un singur esantion ci un buffer 2. Daca prelucrarile sint asa de time critical fa-le la prioritate maxima cu un driver 3. Vezi daca sistemul tau poate duce prelucrarile alea 4. nice e pentru a rula o comanda cu prioritate scazuta. Schedulerul din linux nu-ti garanteaza ca un proces care are nice -20 va ocupa tot timpul procesorul (... ca atunci ar deveni windows/docs cu ecran albastru) 5. vezi ca mai nou se poate seta prioritatea unui proces pe realtime. nu stiu daca e implementata chestia asta pe kernelul 2.4. S-ar putea sa trebuiasca sa folosesti 2.6. Din amintirile mele functia se numeste ceva de genul set_sched() 6. Cauta pe net cum au facut altii :) (daca n-ai facut-o pina acuma) peace Calin
_______________________________________________ RLUG mailing list [email protected] http://lists.lug.ro/mailman/listinfo/rlug
