Salut, de ce nu prea merge timingul extrem de precis programatic din Linux (fara a te complica ingrozitor) ti-au raspuns colistasii, eu te voi ajuta cu restul:
- Programatorul de PIC-uri: daca urmareai unde duce linkul de pe pagina respectiva ai fi vazut ca de la picprog-1.0 s-a ajuns la 1.7, care se compileaza bine mersi pe Mandrake 10.2, care este cel mai bun si mai avansat Linux posibil, deci sunt sanse sa se compileze si pe Slack ;). http://hyvatti.iki.fi/~jaakko/pic/ <- aici ai ultimele versiuni, bonus points daca editezi Makefile si scoti -Wmissing-prototypes ca sa nu ai warninguri. - Mesaje de 60 de caractere max: ghinion PIC-urile astea chiar au PUTINA memorie si mesajul trebuie codat in intregime in putinul ei ram ca pocsag e medssage based nu character based, poti lua un PIC mai instruit din zilele noastre sau il poti face pe cel cu AVR care e intr-o clasa superioara de performanta. - Nu sunt "librarii" C sunt BIBLIOTECI C, asa se traduce library, de la Ha><0r14 "admin" la reteaua de bloc care vrea sa compileze htb-tools si intreaba ce "librarii" ii trebuie nu am pretentii, de la cineva cu Dr. in fata numelui ( chiar si in medicina) vrem mai mult. Mircea "programul meu DOS de pagerare nu bloca nimic, era fully interrupt driven !!" C. On 9/7/05, Dr. Adrian Botescu-Fianu <[EMAIL PROTECTED]> wrote: > M-am dat cu capul zdravan de "timing". la viteza de 512bps pe care vreau sa o > simulez pe pinul DTR al portului serial ar trebui sa il mentin intr-o stare > timp de aproximativ 2milisecunde. Am crezut initial ca nu merge din cauza > unei latente a schimbarii starii pinului DTR si am incercat ceva mai simplu > (adica nu am mai schimbat starea pinului DTR) care a dovedit ca problema nu > era acolo: > > #include <sys/time.h> > #include <sched.h> > #include <time.h> > #include <stdio.h> > > int n; > const struct timespec bps512 = { 0, 1953125}; > struct sched_param s; > > int main (void){ > struct timeval before, after; > > s.sched_priority = sched_get_priority_max (SCHED_FIFO); > if (sched_setscheduler ( 0, SCHED_FIFO, &s ) == -1) { > fprintf (stderr, "Error setting scheduling policy. Aborting \n"); > return 1; > } > for(n=0;n<512;n++) { > gettimeofday(&before, NULL); > nanosleep (&bps512, 0); > gettimeofday(&after, NULL); > printf ("Elapsed microseconds: %d\n", > after.tv_sec * 1000000 + after.tv_usec - > before.tv_sec * 1000000 - before.tv_usec ) ; > } > } > > > > Linuxul meu Slack 10.0 pe un Sempron la 2800, 512MB RAM si kernel 2.4.29 Nu > are de loc precizie la folosirea nanosleep() din C. Daca dau prioritate > maxima procesului pauza este in sfarsit cea pe care o doresc dar apar alte > belele. Sistemul devine neutilizabil pe toata perioada rularii programului.Am > compilat 2.6.13 si daca ii dau prioritate maxima procesului in loc de 2ms > doarme in jur de 8 dar constant, fara ca sistemul sa se blocheze, dar tot nu > ma ajuta cu nimic. > Pe un Athlon XP 2400 parca, tot cu slack dar cu kernel 2.6.0 recompilat din > surse se mai apropie de pauza pe care o vreau de 2milisecunde dar variaza > totusi ajungand si la 4ms. > > Chiar nu pot face in nici un fel sa obtin o precizie buna pt un sleep de 2 > milisecunde? Exista o solutie mai buna decat cea aplicata? Cum de s-a putut > face asa ceva in dos acum 12 ani si in C sub Linux nu se poate? > > Se pare ca in cele din urma singura solutie e folosirea dispozitivelor Hard > enumerate mai jos. Problema e insa ca programul ala de scris picuri care mi-a > fost recomandat e deja prea vechi si nu reusesc sa il compilez in linuxul de > acum. Poate instalez o versiune de pe atunci cu librariile C corespunzatoare. > Cele recomandate nu pot coda mesaje mai mari de aprox 60 de caractere din > cate am inteles, dar totusi ar fi un inceput. > > Adrian.
