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.

Raspunde prin e-mail lui