abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 00:33 | Zajímavý software

    plwm je nový, poměrně minimalistický správce oken pro X11. Podporuje dynamické dláždění okny, plochy, pravidla pro okna atd. Zvláštností je, že je napsaný v logickém programovacím jazyce Prolog. Používá implementaci SWI-Prolog.

    Fluttershy, yay! | Komentářů: 2
    včera 00:22 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    24.5. 23:00 | Zajímavý článek

    Sean Heelan se na svém blogu rozepsal o tom, jak pomocí OpenAI o3 nalezl vzdálenou zranitelnost nultého dne CVE-2025-37899 v Linuxu v implementaci SMB.

    Ladislav Hagara | Komentářů: 4
    24.5. 04:00 | Zajímavý článek

    Jiří Eischmann v příspěvku na svém blogu představuje typy, jak lépe chránit své soukromí na mobilním telefonu: "Asi dnes neexistuje způsob, jak se sledování vyhnout úplně. Minimálně ne způsob, který by byl kompatibilní s tím, jak lidé technologie běžně používají. Soukromí ovšem není binární věc, ale škála. Absolutního soukromí je dnes na Internetu dost dobře nedosažitelné, ale jen posun na škále blíže k němu se počítá. Čím méně dat se o vás posbírá, tím nepřesnější budou vaše profily a tím méně budou zneužitelné proti vám."

    Ladislav Hagara | Komentářů: 12
    24.5. 00:22 | Nová verze

    Byla vydána nová stabilní verze 25.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Warbler. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

    Ladislav Hagara | Komentářů: 0
    23.5. 18:11 | Nová verze

    Multiplatformní open source spouštěč her Heroic Games Launcher byl vydán v nové stabilní verzi 2.17.0 Franky (Mastodon, 𝕏). Přehled novinek na GitHubu. Instalovat lze také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    23.5. 18:00 | Nová verze

    Organizace Apache Software Foundation (ASF) vydala verzi 26 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 0
    23.5. 14:55 | IT novinky

    Klávesnice IBM Enhanced Keyboard, známá také jako Model M, byla poprvé představena v roce 1985, tzn. před 40 lety, s počítači IBM 7531/7532 Industrial Computer a 3161/3163 ASCII Display Station. Výročí připomíná článek na zevrubném sběratelském webu Admiral Shark's Keyboards. Rozložení kláves IBM Enhanced Keyboard se stalo průmyslovým standardem.

    Fluttershy, yay! | Komentářů: 6
    23.5. 12:00 | Nová verze

    Vyšlo Pharo 13 s vylepšenou podporou HiDPI či objektovým Transcriptem. Pharo je programovací jazyk a vývojové prostředí s řadou pokročilých vlastností.

    Pavel Křivánek | Komentářů: 4
    23.5. 04:00 | IT novinky

    Java má dnes 30. narozeniny. Veřejnosti byla představena 23. května 1995.

    Ladislav Hagara | Komentářů: 7
    Jaký je váš oblíbený skriptovací jazyk?
     (56%)
     (29%)
     (7%)
     (4%)
     (0%)
     (0%)
     (5%)
    Celkem 107 hlasů
     Komentářů: 8, poslední včera 15:58
    Rozcestník

    Dotaz: C++, obsluha serioveho portu, daemon

    6.6.2017 19:23 Hrabosh | skóre: 26 | blog: HBlog | Brno
    C++, obsluha serioveho portu, daemon
    Přečteno: 961×
    Zdravím,

    potřeboval bych napsat program, kterej bude spuštenej čekat a poslouchat na seriovem portu. Když přijdou data (ASCII text), rozparsuje, zpracuje a pošle command(taky ASCII text) na ten samý seriový port.

    Můžete mě trochu nasměrovat s tou obsluhou toho portu? Jak udělat, aby ten program poslouchal na seriovém portu a nedošlo k timeoutu? Budu před vysíláním muset ten seriovy port zavřít pro čtení a otevřít pro zápis, nebo to tak nefunguje...?

    Díky, Z.
    To jsem psal já ... to není bordel, to je modulární!

    Řešení dotazu:


    Odpovědi

    6.6.2017 19:41 NN
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon
    Nestacilo by to v Pythonu? Pouzivam a bez problemu..
    7.6.2017 08:33 Hrabosh | skóre: 26 | blog: HBlog | Brno
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon
    To vypadá dobře. Já sjem chtel C++, páč ho budu potřebovat kvuli práci, tak bych se pocvičil. Ty v tom děláš přesně co?
    To jsem psal já ... to není bordel, to je modulární!
    7.6.2017 12:32 NN
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon
    Ja v tom ve smycce taham data z AVR/MAX232, ktera regexpem parsuju a posilam dal..
    vlastikroot avatar 7.6.2017 18:45 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon
    Ja pouzivam QtSerialPort. Podporuje plne asynchronni komunikaci, takze kdyz mi prijdou nejaky bajty, spusti se funkce a zpracuje je. Vetsinou je zpracovavam byte po bytu, ale v pripade ASCII textu se da pouzit s vyhodou newline jako oddelovac zprav. Synchronni (blocking) IO uz je minulost, tim bych se moc nezabyval.
    We will destroys the Christian's legion ... and the cross, will be inverted
    7.6.2017 21:01 R
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon
    Port otvoris normalne cez open (O_RDWR | O_NOCTTY) - na citanie aj zapis. Nastavis parametre (tcgetattr, tcsetattr). Citas/zapisujes cez read/write.
    Řešení 1× (Hrabosh (tazatel))
    21.6.2017 17:18 frr | skóre: 34
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon

    Měl bych jeden příkládek, jak jsem to páchával já. Omlouvám se za nevysokou štábní kulturu, je to jenom pár rychlých hacků. Je tam pár funkcí pro nastavení baudu, formátu znaku apod. prostě inicializaci sériového portu skrz termios. A C++ je tam jenom pro primitivní opouzdření - vlastně se jedná o skoro čisté Céčko.

    Pokud se správně pamatuju, stačilo otevřít device pro čtení i zápis (podrobné flagy viz zdroják), pokonfigurovat baud rate a trochu umravnit TTY halucinace aby se device choval jako tupé znakové zařízení, a pak šlo ten port obsluhovat dvěma různými vlákny, z nichž jedno většinu času spalo zablokované v read() a druhé občas poslalo nějaký write(). Obě vlákna sdílejí otevřený file descriptor.

    Troufl bych si nesouhlasit s názorem, že blokující synchronní I/O je out. Minimálně pokud se sériových portů týče. Rozvlákněním s důslednou aplikací primitivních principů producent/konzument a "pouze na jednom místě se smíš na neurčito zablokovat" se dají napsat docela zajímavé věci (nemluvím o výše odkázaném rychlém bastlu). Je na tom nějaká práce se vzájemnou synchronizací threadů a člověk se nesmí bát trochu "vykouknout ze škatulky" klasických POSIXových synchronizačních primitiv: já jsem si prošel učebnicové příklady a pak jsem si z nich skládal trochu složitější objekty pro "vzájemné vyloučení" a komunikaci více vláken podle potřeb konkrétní aplikace.
    Pravda je, že asynchronní IO s použitím callbacků vyřeší spoustu věcí asi napohled méně pracně - mně to přišlo trochu nepřehledné a v některých případech se mi moc nelíbilo, že pak aplikace dělá "příliš mnoho různých věcí v jednom vlákně", tzn. při nepečlivém programování hrozí situace, kdy se nějaký callback "nečekaně" zablokuje a zdržuje ostatní callbacky. Záleží na osobních preferencích, cílech, situaci, programátorské sebekázni...

    [:wq]
    21.6.2017 17:30 frr | skóre: 34
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon
    Pardon... znovu jsem si přečetl zadání a mám pocit, že ani nepotřebujete machrovat s vlákny, zámky a frontami. To Vaše zadání je prostý "odpovídač" request/response. Pokud správně rozumím, nepotřebujete zároveň přijímat a odesílat. Úloha "čekám na nějaká data, když přijdou tak se podrbu na hlavě a pak něco pošlu, goto na začátek" se dá pohodlně obsloužit jediným vláknem. Kein Stress. To že může být device otevřený s dovoleným zápisem i čtením je samozřejmost. Softwarové vrstvy i UART hardware mají každým směrem samostatný buffer. Inicializace termios viz můj odkaz výše. Tuším tcsetattr() a pár funkcí kolem. Čtení zápis normálně read()/write(). Read se samozřejmě na neurčito zablokuje, pokud nechodí žádná data, ale dá se signálem probudit, pokud si to povolíte. I timeout se dá zařídit. Nebo použijte nějaký ten async způsob práce, pokud Vám bude sympatičtější než blokující vlákna.
    [:wq]
    22.6.2017 08:42 frr | skóre: 34
    Rozbalit Rozbalit vše Re: C++, obsluha serioveho portu, daemon
    Což mi připomíná, že mám možná pro Vaše potřeby "hotovější" example. Jediné vlákno, ale má to démonizaci, má to již zmíněné rutiny pro konfiguraci sériového portu, dělá to cosi ve smyčce se sériovým portem. Posílá to string jednou za sekundu, pokud možno přesně na hraně celé sekundy (a že to není legrace, je ten kód kolem časování v hlavní smyčce dost nepřehledný a hustě komentovaný.) Vám stačí vykostit z hlavní smyčky programu ty blbosti kolem časovačů, jako hlavní blokující bod tam dát nějaký read() ze sériového portu a dopsat svých pár rutin na tu sériovou komunikaci.
    [:wq]

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.