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