Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: timmynovak 12 Října 2011, 17:24:25

Název: Jak bufferovat tok do sériového portu?
Přispěvatel: timmynovak 12 Října 2011, 17:24:25
Ahoj, mám následující script:

Kód: [Vybrat]
#!/bin/bash

while true

do

read LINE < /dev/ttyUSB0

...nějaká činnost.... (validace, zápis do db ...)
echo $LINE >> /home/xxx/serial.log

done

A někdy se stane, že se mi nějaký řádek přenášený po sériové lince celý ztratí. Vysvětluji si to zatím tím, že v nějaké_činnosti se skript zdrží dlouho a nestihne udělat read LINE - je to možné? Vždy jsem si myslel, že tma je nějaký buffer. Řádků je cca 5 do minuty, některé jdou rychle za sebou (<1s). Díky.
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: timmynovak 09 Listopadu 2011, 13:13:28
tak jsem nijak nepokročil, nikdo jste se s ničím takovým nesetkal?
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: daysleeper 09 Listopadu 2011, 21:56:21
Dělal jsem s tím trochu pokusy, a verze
Kód: [Vybrat]
while read LINE

do

...nějaká činnost.... (validace, zápis do db ...)
echo $LINE >> /home/xxx/serial.log

done < /dev/ttyUSB0
se mi zdála spolehlivější, ale mohla to být náhoda  ;)
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: timmynovak 10 Listopadu 2011, 00:01:41
zkusim, děkuji
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: timmynovak 11 Listopadu 2011, 23:27:49
zkusil jsem, ale ani to není pořád zcela ideální. jak to když tak někdo řešíte, když potřebujete data ze sériového portu posílat do databáze? pochybuji, že bych byl jediný, kdo má tento problém:( díky
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: MacHala 16 Listopadu 2011, 17:52:06
mozna je to trosku s krizkem po funuse, ale dival ses na prikaz ulimit ? konkretne asi ulimit -p ?
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: psychogenius 24 Listopadu 2011, 19:30:04
Skusil si to riešiť cez ruru ? Pipe ?
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: timmynovak 03 Ledna 2012, 14:24:09
pomohl bych si, kdybych použil &?

Kód: [Vybrat]
...nějaká činnost.... (validace, zápis do db ...) &

rouru myslíš jak? styl echo | mysql ? Ano, tak to přesně dělám.

díky.
Název: Re:Jak bufferovat tok do sériového portu?
Přispěvatel: daysleeper 03 Ledna 2012, 18:44:04
Ještě mě napadla jedna věc, některé programy čtou stdin, i když ho třeba nepotřebují, a pak je lepší použít nestandardní redirect (zde na fd 3 místo standardní fd 0) třeba takto
Kód: [Vybrat]
while read -r -u 3 LINE; do

...nějaká činnost.... (validace, zápis do db ...)
echo $LINE >> /home/xxx/serial.log

done 3< /dev/ttyUSB0