/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Empty tx buffer / serial port
Fra : Jakob Kirkegaard


Dato : 05-12-01 20:10

Hej,

Jeg har et problem i forbindelse med noget serial kommunikation på en
linux box.

Målet er at sende 13 bytes og umiddelbart efter den sidste byte har
forladt uarten, skal der udføres en nye kommando. Problemet er ikke at
skrive de 13 bytes, men at vide hvornår UARTens tx buffer er tom.
Indtil videre kører det således, at efter write kommandoen, køres en
usleep(20000) (det tager ca. 13,5 ms at sende 13 bytes + start/stop bit
ved 9600kbs). Dette er dog meget upræcist og tæt på ubrugeligt,
medmindre der arbejdes med meget store delays (uønsket!)

Jeg tænkte derfor om der fandtes et signal, som kunne bruges i den
forbindelse (tx buffer empty), eller at man på anden måde kunne opnå
kendskab til, hvor meget der ligger i tx bufferen - evt. med noget asm
kode.

Andre forslag til løsning af problemet modtages med glæde!

--
mvh Jakob Kirkegaard

 
 
Claus Rasmussen (05-12-2001)
Kommentar
Fra : Claus Rasmussen


Dato : 05-12-01 20:11

Jakob Kirkegaard wrote:

> Andre forslag til løsning af problemet modtages med glæde!

Æhh... åbne devicet som en fil og så bruge flush til at tømme
bufferen ?

(Vildt gæt, jeg kender meget lidt til seriel kommunikation)

-Claus



Jakob Kirkegaard (05-12-2001)
Kommentar
Fra : Jakob Kirkegaard


Dato : 05-12-01 20:17

Wednesday 05 December 2001 20:10 skrev Claus Rasmussen:

> Jakob Kirkegaard wrote:
>
>> Andre forslag til løsning af problemet modtages med glæde!
>
> Æhh... åbne devicet som en fil og så bruge flush til at tømme
> bufferen ?

De data som jeg sender, skal jo gerne være ude af uarten inden den
tømmes. Problemet er ikke at tømme bufferen, men at vide hvornår den er
tømt.

--
mvh Jakob Kirkegaard

Claus Rasmussen (05-12-2001)
Kommentar
Fra : Claus Rasmussen


Dato : 05-12-01 21:03

Jakob Kirkegaard wrote:

> De data som jeg sender, skal jo gerne være ude af uarten inden den
> tømmes. Problemet er ikke at tømme bufferen, men at vide hvornår den er
> tømt.

Med alle mulige forbehold, så ville jeg tro, at flush er mappet således,
at man ved at tømme filbufferen også fik data sendt fra UARTen...

Men kig her i stedet for at diskutere med mig, der alligevel ikke /ved/
noget: http://www.linuxdoc.org/HOWTO/Serial-Programming-HOWTO/

-Claus



Claus Rasmussen (05-12-2001)
Kommentar
Fra : Claus Rasmussen


Dato : 05-12-01 21:25

Claus Rasmussen wrote:

> Med alle mulige forbehold, så ville jeg tro, at flush er mappet således,
^^^^^
> at man ved at tømme filbufferen også fik data sendt fra UARTen...

Sludder. Jeg mente "sync".

-Claus


Jakob Kirkegaard (05-12-2001)
Kommentar
Fra : Jakob Kirkegaard


Dato : 05-12-01 21:55

Wednesday 05 December 2001 21:03 skrev Claus Rasmussen:

> Jakob Kirkegaard wrote:
>
>> De data som jeg sender, skal jo gerne være ude af uarten inden den
>> tømmes. Problemet er ikke at tømme bufferen, men at vide hvornår den
>> er tømt.
>
> Med alle mulige forbehold, så ville jeg tro, at flush er mappet
> således, at man ved at tømme filbufferen også fik data sendt fra
> UARTen...
>
> Men kig her i stedet for at diskutere med mig, der alligevel ikke
> /ved/ noget: http://www.linuxdoc.org/HOWTO/Serial-Programming-HOWTO/

Den har jeg været forbi mange gange, men har ikke fundet noget svar.
Det fandt jeg derimod i "Posix Programmers Guide" - tcdrain funktionen
ser ud til at være løsningen på mit problem!
Indledningsvis troede jeg, at man ved flush/drain etc. blot fik cleared
bufferen med det samme uden at dataene blev sendt - men når dette ikke
sker, er der jo intet problem!

--
mvh Jakob Kirkegaard

Thorbjoern Ravn Ande~ (05-12-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 05-12-01 21:22

Jakob Kirkegaard <jkir00@kom.auc.dk> writes:

> Hej,
>
> Jeg har et problem i forbindelse med noget serial kommunikation på en
> linux box.
>
> Målet er at sende 13 bytes og umiddelbart efter den sidste byte har
> forladt uarten, skal der udføres en nye kommando. Problemet er ikke at
> skrive de 13 bytes, men at vide hvornår UARTens tx buffer er tom.

Du har skaffet dig et datablad på kredsen?

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk

Jakob Kirkegaard (05-12-2001)
Kommentar
Fra : Jakob Kirkegaard


Dato : 05-12-01 21:58

Wednesday 05 December 2001 21:21 skrev Thorbjoern Ravn Andersen:
>> Jeg har et problem i forbindelse med noget serial kommunikation på en
>> linux box.
>>
>> Målet er at sende 13 bytes og umiddelbart efter den sidste byte har
>> forladt uarten, skal der udføres en nye kommando. Problemet er ikke
>> at skrive de 13 bytes, men at vide hvornår UARTens tx buffer er tom.
>
> Du har skaffet dig et datablad på kredsen?

Nej - men det vist heller ikke nødvendigt, da jeg fandt en løsning på
problemet uden at være nødsaget til at gå igang med asm, datablade etc.

--
mvh Jakob Kirkegaard

Thorbjoern Ravn Ande~ (05-12-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 05-12-01 22:00

Jakob Kirkegaard <jkir00@kom.auc.dk> writes:

> Nej - men det vist heller ikke nødvendigt, da jeg fandt en løsning på
> problemet uden at være nødsaget til at gå igang med asm, datablade etc.

Og denne løsning er (hvis nu folk i fremtiden skulle
.... google.. osvosv).
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk

Jakob Kirkegaard (05-12-2001)
Kommentar
Fra : Jakob Kirkegaard


Dato : 05-12-01 22:06

Wednesday 05 December 2001 22:00 skrev Thorbjoern Ravn Andersen:

> Jakob Kirkegaard <jkir00@kom.auc.dk> writes:
>
>> Nej - men det vist heller ikke nødvendigt, da jeg fandt en løsning på
>> problemet uden at være nødsaget til at gå igang med asm, datablade
>> etc.
>
> Og denne løsning er (hvis nu folk i fremtiden skulle
> ... google.. osvosv).

Det er skrevet anden steds i tråden - tcdrain funktionen benyttes. Jeg
antog at data blev cleared fra bufferen, når denne benyttedes, men det
er tilsyneladende ikke tilfældet, hvorfor funktionen er helt ideel.

--
mvh Jakob Kirkegaard

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408907
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste