Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

serial port se ne zatvori po izlasku iz aplikacije

[es] :: C/C++ programiranje :: serial port se ne zatvori po izlasku iz aplikacije

[ Pregleda: 2074 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mulaz
Ljubljana

Član broj: 47602
Poruke: 2239
*.dial-up.dsl.siol.net.

Jabber: mulaz@elitesecurity.org
Sajt: www.mulaz.org


+184 Profil

icon serial port se ne zatvori po izlasku iz aplikacije30.12.2005. u 18:29 - pre 222 meseci
http://www.lrr.in.tum.de/~acher/vc840/vc840.c
nasao sam taj program .. sluzi za iscitavanje vrednosti multimetra.. ali nema to sad veze..

kad se program pokrene otvori konekdciju do serijskog porta
program iscitava vrednosti.. i moze da se zatvori samo C-c (bar koliko ja znam
posle prve uupotrebe programa, nije vise moguc pristup serijskom portu

koliko se ja razumem u C, u programu postoji close_serial funkcija, ali se nigde ne poziva, a i kad bi bila negde u int main(), sa C-c program bi se zavrsio pre izvrsavnja serial_close funkcije

to prouzruci da ako hocu vise merenja da napravim, da treba svaki put da resetiram kompjuter, sta traje kod mene oko 2min (nije bas toliko.. ali smara)

dali postoji nacin da bi se zatvorio serijski port (ako treba i u posebnoj aplikaciji)?

____

razumem neke onsnovne stvari u programu, ali ne znam sta je onaj int 'fd' ? definise se sa open() funkcijom ali ne znam koja mu je vrednost, ali treba ta za zatvaranje serial porta 'close(fd)'

ako neko ima malo vise iskustva sa tim, da kaze sta bi moglo da se uradi

[Ovu poruku je menjao mulaz dana 30.12.2005. u 19:42 GMT+1]
Bolje ispasti glup nego iz aviona
http://www.mulaz.org/
 
Odgovor na temu

tupito
Vladan Milivojevic
Beograd

Član broj: 55195
Poruke: 54
*.041net.co.yu.



Profil

icon Re: serial port se ne zatvori po izlasku iz aplikacije31.12.2005. u 00:52 - pre 222 meseci
funkcijom open() otvaras fajl; on vraca int koji predstavlja file descriptor ili kako je
autor ovog koda to skraceno nazvao promenljivu fd;funkcija close ti zatvara fajl,
njoj dajes file descriptor koji treba da zatvori :close(fd);Takodje ako open() ne uspe da otvori fajl vraca -1;E sad otvoriti fajl u jednoj aplikaciji a onda ga zatvoriti u drugoj prvo pitanje je a zasto bi to radio?sve sto treba da se uradi uradi u jednoj aplikaciji, otvori fajl, zatim radi sta vec hoces sa njim-> u tvom slucaju iscitivaj podatke onoliko puta koliko ti je potrebno , a kad zavrsis zatvori fajl i izadji iz aplikacije.

evo ti izmenjena main() funkcija ostatak ti je isti:
Code:

/*------SVE IZNAD MAIN() je isto ------------------------------------------*/ 
int main(int argc,char **argv)
{
    unsigned char data;
    unsigned char buffer[100];
    unsigned char buffer1[9];
    char units[20];
    int n;
    float it;
    unsigned int t,tf;
    
    fd=open_serial("/dev/ttyS0", 2400);

    set_rts_dtr(fd); // DTR/RTS setzen

    t=get_time(NULL);
    while(1)
    {
        n=0;
        memset(buffer,0,20);
        while(1)
        {
            read(fd,&buffer[n],1);        
            if ((buffer[n]&0xf0)==0xe0 || (n==16))
                break;        
            n++;
        }
#if 0
        // Raw output
        for(n=0;n<16;n++)
            printf("%02x ",buffer[n]);
#endif

        buffer1[0]=buffer[0]&15;

        for(n=0;n<8;n++)
            buffer1[1+n]=((buffer[2*n+1]&15)<<4)|(buffer[2*n+2]&15);


#if 0
        // Nibble compacted data
        for(n=0;n<8;n++)
            printf("%02x ",buffer1[n]);

        printf("%i%i%i%i\n",digit(buffer1[1]),digit(buffer1[2]),
        digit(buffer1[3]),digit(buffer1[4]));
#endif

        if ((buffer1[3]&0x7f)==0x68)
            it=9999999;
        else
            it=1000.0*digit(buffer1[1])+100.0*digit(buffer1[2])
                +10*digit(buffer1[3])+1*digit(buffer1[4]);
        

        if (buffer1[4]&0x80)
            it=it/10.0;

        if (buffer1[3]&0x80)
            it=it/100.0;

        if (buffer1[2]&0x80)
            it=it/1000.0;
            
        if (buffer1[1]&0x80)
            it=-it;
        
        tf=(int)((get_time(NULL)-t)/100000.0);
        dvm_unit(buffer1[0], (buffer1[5]<<16)|(buffer1[6]<<8)|buffer1[7],units);
        printf("%0.1f %0.3f %s\n",tf/10.0,it, units);
        fflush(stdout);
        /*-----izmena*/
        if(getc(stdin)!=10)
        {
            break;
        }
        /*--------*/
    }
    /*-----izmena*/
    close(fd);
    /*--------*/
}


UPUSTVO ZA UPOTREBU:
dakle ovo radi malo drugacije, u momentu kada hoces da procitas trenutno stanje ti pretisni ENTER, i izbaci ce ti trenutno stanje, onda ako opet hoces da ti procita opet ENTER i on ti opet izbaci trenutno stanje, ne radi kao u predhodnom slucaju elegantno i automatski ali sto oces vise za 5 minuta razmisljanja i dva reda koda.

KADA SI ZAVRSIO I HOCES DA IZADJES (VEOMA VAZNO):
pritisni bilo koje slovo na tastaturi i zatim ENTER i program ce prvo da zatvori seriski i zatim da se zatvori. ako ga ovako ne zatvoris desi ce ti se isto kao u predhodnom slucaju.

dakle ako zelis da procitas ternutno stanje samo ENTER, a kad si zavrsio neko slovo i ENTER

ovo 100% radi u VC++ za ostalo ti ne garantujem, mozda ces morati da dodas jos neki heder.
 
Odgovor na temu

mulaz
Ljubljana

Član broj: 47602
Poruke: 2239
*.dial-up.dsl.siol.net.

Jabber: mulaz@elitesecurity.org
Sajt: www.mulaz.org


+184 Profil

icon Re: serial port se ne zatvori po izlasku iz aplikacije31.12.2005. u 01:51 - pre 222 meseci
probacu sutra da iskompajliram (nemam vc+ nego gcc, moj komp nije video windowse vec dve godine (osim u .iso obliku))

javicu ako prodje, i pokusacu da editujem da stalno izbacuje vrednosti, dok ne pritisnem nesto na tastaturi
Bolje ispasti glup nego iz aviona
http://www.mulaz.org/
 
Odgovor na temu

Amira71
Amira T. Gursel
Turska

Član broj: 75867
Poruke: 8
*.eee.gantep.edu.tr.

Sajt: www.gantep.edu.tr


Profil

icon Re: serial port se ne zatvori po izlasku iz aplikacije02.01.2006. u 07:05 - pre 222 meseci
Fazon je u tome sto serijski port mora biti kontolisan automatski i neprekidno.
Detaljnije, ceo program mora raditi automatski bez dodatne pomici.
 
Odgovor na temu

sasadom
Sasa Domazetovic
Svuda gde sam trenutno
Beograd

Član broj: 79538
Poruke: 13
*.migcomputers.co.yu.

Sajt: www.SasaPress.com


Profil

icon Re: serial port se ne zatvori po izlasku iz aplikacije02.01.2006. u 21:33 - pre 222 meseci
Kontrola serijskog porta jeste mnogo slozenija nego sto mislite (ne stabilnija cak i udnosu na TCP - socket kontrolu) - MORAS UKLJUCITI DOGADJAJE (EVENT), ALI CES UBRZO SHVATITI DA TU IMA JOS DOSTA PRICE.
MEDJUTIM, ako nije toliko vazno da li ces mozda neki podatak i propustiti i sto je najbitnije ako proces nije previse interaktivan - ODRADI SVE PREUSMERAVANJEM PORTOVA - DOS !
Pa, boze moj, znam mnoge programe koji rade cak sa fiskalnom kasom (neverovatno ali tako je) na ovaj nacin - JA GA SVAKAKO NE PREPORUCUJEM , ALI DRUGI NACIN JE ISUVISE SLOZEN ZA OVDE.
 
Odgovor na temu

Amira71
Amira T. Gursel
Turska

Član broj: 75867
Poruke: 8
*.eee.gantep.edu.tr.

Sajt: www.gantep.edu.tr


Profil

icon Re: serial port se ne zatvori po izlasku iz aplikacije03.01.2006. u 14:22 - pre 222 meseci
VC++ ne poznaje DOS
U borlandu je to nesto drugacije i lakse ali meni treba program za VC++
 
Odgovor na temu

sasadom
Sasa Domazetovic
Svuda gde sam trenutno
Beograd

Član broj: 79538
Poruke: 13
*.migcomputers.co.yu.

Sajt: www.SasaPress.com


Profil

icon Re: serial port se ne zatvori po izlasku iz aplikacije03.01.2006. u 19:54 - pre 222 meseci
Nije tako.
VC++ bukvalno moze sve, ali od tebe zavisi na kom nivou, sto znaci da moze i na naj nizem (pa samin tim jeste ne samerljiv sa drugim jezicima RECIMO KOD DELPHI-JA NEKAD NESTO RADI ALI NEKADA SE DESAVAJU GRESKE ZA KOJE NE MOZETE ZNATI ODAKLE SU I SAMIM TIM NEMATE SANSU DA IH RESITE). Jednostavno resenje u smislu lakog koda moze znaciti samo visok nivo kontrole, sto ne moze resiti HARDVERSKI PROBLEM - da serijska komunikacija nikada nije stabilna i nije je lako 100% kontrolisati (primera radi - kako znati da su podaci koje ste poslali serijskim portom stigli na odrediste, a ako ih posaljete ponovo; da ih ne duplirate i slicno) - A SVE OVO ZAVISI U OGROMNOJ MERI OD ONOGA STA SE NALAZI NA DRUGOJ STRANI (KAKAV JE INTERFEJS UREDJAJA SA KOJIM KOMUNICIRATE).

NARAVNO DA POSTOJI VISE NACINA CAK I ZA IZVRSAVANJE DOS KOMANDI. JEDAN JE TAJ DA MOZES KREIRATI .BAT FAJL PA IZVRSITI TAJ FAJL (BAR 5 METODA POSTOJI ZA OVO - NA RAZNIM NIVOIMA). NADAM SE DA SAM MALO POMOGAO U SAGLEDAVANJU I RESAVANJU PROBLEMA (GDE CES ULOZITI TRUD - KOJIM PRAVCEM CES ICI).
 
Odgovor na temu

[es] :: C/C++ programiranje :: serial port se ne zatvori po izlasku iz aplikacije

[ Pregleda: 2074 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.