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.

***********************cut here*****************************
#include <diverse rahaturi>
static int dovalue=0;
void sig_handler(int sig)
{
//ceva activitati aici
        EnableTimer(625);
}

int main()
{
        slot_signal_t sig;

        static struct sigaction act, act_old;
        /* set action for signal */
        act.sa_handler = sig_handler;
        sigemptyset(&act.sa_mask);
        sigaddset(&act.sa_mask, SIGALRM);
        
        if (sigaction(SIGALRM, &act, &act_old)) {
                Close_Slot(SLOT0);
                Close_Slot(SLOT1);
                puts("La culcare, belele!");
                return FAILURE;
        }

        /* signal condiction */
        if(setSignal(SLOT0,SIGALRM,getpid())){
                Close_Slot(SLOT0);
                Close_Slot(SLOT1);
                sigaction(SIGALRM, &act_old, NULL);
                puts("La culcare, belele!");
                return FAILURE;
        }

        EnableTimer(625);
//alte acţiuni
        DisableTimer();

        sigaction(SIGALRM, &act_old, NULL);
        return SUCCESS;
}
***********************cut here*****************************

-- 
Dragos P
126296 luser
"La revedere. Drum bun"

_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui