|
| 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
| |
|
|