Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Jak bufferovat tok do sériového portu?  (Přečteno 2225 krát)

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Jak bufferovat tok do sériového portu?
« kdy: 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.

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Re:Jak bufferovat tok do sériového portu?
« Odpověď #1 kdy: 09 Listopadu 2011, 13:13:28 »
tak jsem nijak nepokročil, nikdo jste se s ničím takovým nesetkal?

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:Jak bufferovat tok do sériového portu?
« Odpověď #2 kdy: 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  ;)

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Re:Jak bufferovat tok do sériového portu?
« Odpověď #3 kdy: 10 Listopadu 2011, 00:01:41 »
zkusim, děkuji

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Re:Jak bufferovat tok do sériového portu?
« Odpověď #4 kdy: 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

MacHala

  • Stálý člen
  • **
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • ZlejT
Re:Jak bufferovat tok do sériového portu?
« Odpověď #5 kdy: 16 Listopadu 2011, 17:52:06 »
mozna je to trosku s krizkem po funuse, ale dival ses na prikaz ulimit ? konkretne asi ulimit -p ?
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

psychogenius

  • Návštěvník
  • Příspěvků: 60
Re:Jak bufferovat tok do sériového portu?
« Odpověď #6 kdy: 24 Listopadu 2011, 19:30:04 »
Skusil si to riešiť cez ruru ? Pipe ?

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Re:Jak bufferovat tok do sériového portu?
« Odpověď #7 kdy: 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.
« Poslední změna: 03 Ledna 2012, 14:43:07 od timmynovak »

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:Jak bufferovat tok do sériového portu?
« Odpověď #8 kdy: 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

 

Provoz zaštiťuje spolek OpenAlt.