/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
timeout på /dev/ttyS1 med select()
Fra : Stephan Henningsen


Dato : 16-10-01 19:00

Hopla.

Jeg er ved at skrive en funktion der kommunikerer over
serielporten. Porten (filen) skal overvåges for at se, om
der sker timeout, enten ved at stikket til enheden i den
anden ende hives ud, eller den aldrig har været sat til
eller tændt.

Hertil bruger jeg select(), men den giver aldrig timeout.

I Serial-Programming-HOWTO installerer han signal handlers,
men er det virkelig nødvendigt?

Det drejer sig om Receive-løkken i denne fil:
   http://212.10.213.249/~stephan/rd.cpp

Jeg håber nogen kan hjælpe mig.

--
Stephan Henningsen /
/ tisprut productions[tm]


 
 
Kim Petersen (16-10-2001)
Kommentar
Fra : Kim Petersen


Dato : 16-10-01 19:31

stephan@levelout.tisprut.dk (Stephan Henningsen) writes:

> Hopla.
>
> Jeg er ved at skrive en funktion der kommunikerer over
> serielporten. Porten (filen) skal overvåges for at se, om
> der sker timeout, enten ved at stikket til enheden i den
> anden ende hives ud, eller den aldrig har været sat til
> eller tændt.
>
> Hertil bruger jeg select(), men den giver aldrig timeout.
>
> I Serial-Programming-HOWTO installerer han signal handlers,
> men er det virkelig nødvendigt?
>
> Det drejer sig om Receive-løkken i denne fil:
>    http://212.10.213.249/~stephan/rd.cpp
Jeg går ud fra at REQ er sat i ../config.h

Drop exception_set du modtager ikke OOB (out of band) data på en seriel
port (afaik). Nu er jeg C programmør - og derfor må jeg spekulere på om
din timeout værdi er nulstillet automatisk i C++? Men udover det, hvis
timeout ikke bliver gensat i hver iteration af løkken, så kan du ikke
være sikker på at det virker .... f.eks. i Linux er timeval udefineret
efter kaldet til select. Derudover ser det for mig rigtigt ud.
>
> Jeg håber nogen kan hjælpe mig.
Håber det hjalp

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Stephan Henningsen (17-10-2001)
Kommentar
Fra : Stephan Henningsen


Dato : 17-10-01 11:34

On 16 Oct 2001 20:31:06 +0200, Kim Petersen wrote:
>stephan@levelout.tisprut.dk (Stephan Henningsen) writes:
>
>> Det drejer sig om Receive-løkken i denne fil:
>>    http://212.10.213.249/~stephan/rd.cpp
>Jeg går ud fra at REQ er sat i ../config.h

Det kan du bidde skeer på =)


>Drop exception_set du modtager ikke OOB (out of band) data på en seriel
>port (afaik). Nu er jeg C programmør - og derfor må jeg spekulere på om
>din timeout værdi er nulstillet automatisk i C++? Men udover det, hvis
>timeout ikke bliver gensat i hver iteration af løkken, så kan du ikke
>være sikker på at det virker .... f.eks. i Linux er timeval udefineret
>efter kaldet til select. Derudover ser det for mig rigtigt ud.

Jeg har også prøve at sætte ind i timeval i toppen af
løkken, så de sættes hver gang lige før select() -- det
hjalp ikke.

Jeg ved ikke, hvordan jeg nulstiller timeren. Der skriver
han vist heller ikke noget om i HOWTO'en, så det antager jeg
er, som det skal være =).


>> Jeg håber nogen kan hjælpe mig.
>Håber det hjalp

Nja, ikke rigtigt, men tak alligevel.

Jeg har besluttet mig at droppe timeout-testen, da jeg blev alvorligt
træt af at se den hænge efter en hel aftens arbejde
Timeout er alligevel bare en luksus =). Og for mit projekt er det
desuden nok, at jeg blot dokumenterer, at jeg er klar over, at timeout
er smart, hvorfor det er smart, og at jeg kommer med nogle udkast til
løsningsforslag .. vil jeg mene. Punktum =).


--
Stephan Henningsen /
/ tisprut productions[tm]


Kim Petersen (17-10-2001)
Kommentar
Fra : Kim Petersen


Dato : 17-10-01 16:40

stephan@levelout.tisprut.dk (Stephan Henningsen) writes:

> On 16 Oct 2001 20:31:06 +0200, Kim Petersen wrote:
> >stephan@levelout.tisprut.dk (Stephan Henningsen) writes:
> >
> >> Det drejer sig om Receive-løkken i denne fil:
> >>    http://212.10.213.249/~stephan/rd.cpp
> >Jeg går ud fra at REQ er sat i ../config.h
>
> Det kan du bidde skeer på =)
>
> Jeg ved ikke, hvordan jeg nulstiller timeren. Der skriver
> han vist heller ikke noget om i HOWTO'en, så det antager jeg
> er, som det skal være =).
>
Nulstilling af timeren:
#include <string.h>
....
memset(&device_timeout,0,sizeof(timeval))

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Kent Friis (17-10-2001)
Kommentar
Fra : Kent Friis


Dato : 17-10-01 17:30

Den 17 Oct 2001 10:34:28 GMT skrev Stephan Henningsen:
>On 16 Oct 2001 20:31:06 +0200, Kim Petersen wrote:
>>stephan@levelout.tisprut.dk (Stephan Henningsen) writes:
>>
>>> Det drejer sig om Receive-løkken i denne fil:
>>>    http://212.10.213.249/~stephan/rd.cpp
>>Jeg går ud fra at REQ er sat i ../config.h
>
>Det kan du bidde skeer på =)
>
>
>>Drop exception_set du modtager ikke OOB (out of band) data på en seriel
>>port (afaik). Nu er jeg C programmør - og derfor må jeg spekulere på om
>>din timeout værdi er nulstillet automatisk i C++? Men udover det, hvis
>>timeout ikke bliver gensat i hver iteration af løkken, så kan du ikke
>>være sikker på at det virker .... f.eks. i Linux er timeval udefineret
>>efter kaldet til select. Derudover ser det for mig rigtigt ud.
>
>Jeg har også prøve at sætte ind i timeval i toppen af
>løkken, så de sættes hver gang lige før select() -- det
>hjalp ikke.
>
>Jeg ved ikke, hvordan jeg nulstiller timeren. Der skriver
>han vist heller ikke noget om i HOWTO'en, så det antager jeg
>er, som det skal være =).

Du får sandsynligvis aldrig nogen timeout, så længe du også bruger
&device_writeset. En serielport er normalt altid parat til at sende
data, medmindre den venter på flowcontrol, *OG* output-bufferen (4KB)
er fyldt. device_exceptionset kan jeg heller ikke se hvad du vil med
(men den har jeg heller aldrig fattet hvad skal bruges til).

Mvh
Kent
--
War does not determine who is right, only who is left.

Kim Petersen (17-10-2001)
Kommentar
Fra : Kim Petersen


Dato : 17-10-01 17:45

kfr@fleggaard.dk (Kent Friis) writes:

> Den 17 Oct 2001 10:34:28 GMT skrev Stephan Henningsen:
> >On 16 Oct 2001 20:31:06 +0200, Kim Petersen wrote:
> >>stephan@levelout.tisprut.dk (Stephan Henningsen) writes:
> >>
> >>> Det drejer sig om Receive-løkken i denne fil:
> >>>    http://212.10.213.249/~stephan/rd.cpp
> >
> >Jeg ved ikke, hvordan jeg nulstiller timeren. Der skriver
> >han vist heller ikke noget om i HOWTO'en, så det antager jeg
> >er, som det skal være =).
>
> Du får sandsynligvis aldrig nogen timeout, så længe du også bruger
> &device_writeset. En serielport er normalt altid parat til at sende
> data, medmindre den venter på flowcontrol, *OG* output-bufferen (4KB)
> er fyldt. device_exceptionset kan jeg heller ikke se hvad du vil med
> (men den har jeg heller aldrig fattet hvad skal bruges til).
Doh! Kent har ret.... Det er det ... du må aldrig sætte write med mindre
du skal bruge den.

Og Kent - exceptionset er til OOB (Out Of Band) data på TCP/IP, dvs
data på strømmen, med højere prioritet. Et eksempel på hvor dette bliver
brugt er telnet - hvis du trykker på ^C (et interrupt) så bliver denne
markeret med OOB.

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Kent Friis (17-10-2001)
Kommentar
Fra : Kent Friis


Dato : 17-10-01 19:17

Den 17 Oct 2001 18:44:59 +0200 skrev Kim Petersen:
>kfr@fleggaard.dk (Kent Friis) writes:
>
>> Den 17 Oct 2001 10:34:28 GMT skrev Stephan Henningsen:
>> >On 16 Oct 2001 20:31:06 +0200, Kim Petersen wrote:
>> >>stephan@levelout.tisprut.dk (Stephan Henningsen) writes:
>> >>
>> >>> Det drejer sig om Receive-løkken i denne fil:
>> >>>    http://212.10.213.249/~stephan/rd.cpp
>> >
>> >Jeg ved ikke, hvordan jeg nulstiller timeren. Der skriver
>> >han vist heller ikke noget om i HOWTO'en, så det antager jeg
>> >er, som det skal være =).
>>
>> Du får sandsynligvis aldrig nogen timeout, så længe du også bruger
>> &device_writeset. En serielport er normalt altid parat til at sende
>> data, medmindre den venter på flowcontrol, *OG* output-bufferen (4KB)
>> er fyldt. device_exceptionset kan jeg heller ikke se hvad du vil med
>> (men den har jeg heller aldrig fattet hvad skal bruges til).
>Doh! Kent har ret.... Det er det ... du må aldrig sætte write med mindre
>du skal bruge den.
>
>Og Kent - exceptionset er til OOB (Out Of Band) data på TCP/IP, dvs
>data på strømmen, med højere prioritet. Et eksempel på hvor dette bliver
>brugt er telnet - hvis du trykker på ^C (et interrupt) så bliver denne
>markeret med OOB.

Aha, det er derfor ^C virker nærmest øjeblikkeligt på en telnet fra
en unix, men tager ti minutter med telnet fra en windows, når man lige
kom til at lave en cat på en lidt for stor fil

Jeg takker for informationen.

Mvh
Kent
--
War does not determine who is right, only who is left.

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste