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

Raspunde prin e-mail lui