Portál AbcLinuxu, 15. června 2024 06:31


Dotaz: asynchronní čtení ze sériového portu

2.3.2010 10:32 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
asynchronní čtení ze sériového portu
Přečteno: 485×
Odpovědět | Admin
Příloha:
Dobrý den,

experimentuju s asynchronním čtením ze sériového portu(používám redukci do usb
 Bus 006 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC 
. příklad jsem stáhl z tldp

příklad u mně funguje tak, že program přijme sigio, skočí do funkce, ale nevrátí se z ní, dokud nepošlu další znak následně vypíše, že bylo načteno -1 znaků a prázdný  string>
received SIGIO signal.
received SIGIO signal.
string: long:-1
Jak se to chová u Vás? kde hledat chybu? díky za pomoc
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.3.2010 13:35 vch | skóre: 11
Rozbalit Rozbalit vše Re: asynchronní čtení ze sériového portu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi ti moc nepomůžu, jak se to chová u mě otestovat nemůžu a kde hledat přesně chybu taky nevím :-) Ale jak se tak dívám na zdroják, tak mě moc nepřesvědčuje a možná by pomohlo najít si lepší příklad. Například ta řádka s #define _POSIX_SOURCE 1 by měla být před všemi těmi #include (jinak je tam zcela zbytečně) a navíc ten kód rozhodně není POSIX-compliant. Ale jak říkám, je to jen povrchní pozorování, do čtení sériového portu nevidím.
2.3.2010 14:25 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: asynchronní čtení ze sériového portu
no priklad je vzat z tldp, tam snad autori vedi co doporucuji :), co se tyce printf(string: %c, len:%d, buf[0], len); je to jen pokus puvodne tam byl vypis stringu, ale to na to vliv mit nebude...
2.3.2010 16:06 vch | skóre: 11
Rozbalit Rozbalit vše Re: asynchronní čtení ze sériového portu
Já tldp nezpochybňuju, jen říkám, že ten define má být před includy, že ten zdroják není POSIX, i když to tvrdí (proto se nepřeloží, když ten define dáš na začátek) a že to nepůsobí důvěryhodně. Ale pravda, tvůj problém to neřeší :-)
2.3.2010 19:40 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: asynchronní čtení ze sériového portu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Uh, aniž bych pokoušel aio tak si dovolím pár rad:
            res = read(fd,buf,255);
            buf[res]='\0';
            printf("string:%c long:%d\n", buf[0], res);
Pokud provedete tohle s res==-1 tak si nejen zaděláte na průser ale ani nemůžete pořádně věřit tomu printfu.

Mimochodem -1 značí chybu, bylo by dobré se pokusit ji získat a vypsat.

Funguje Vám ten program bez aio?

Proč nepoužijete jednoduše select nebo poll? Aio je obecně považováno za výstřednost.
In Ada the typical infinite loop would normally be terminated by detonation.
2.3.2010 21:42 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: asynchronní čtení ze sériového portu
muzu vedet co je aio? ja vsechny examply potkal s read, write, o select poll vim ale nikdy sem nezkousel/nestudoval, mam to brat jako doporuceni, ze jsou lepsi a podivat se na ne?

ze -1 je chyba, vim jen me nenapadlo zkusit ji resolvnout udelam a dam vedet co je za chyba diky za nazor
Fuky avatar 2.3.2010 22:00 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: asynchronní čtení ze sériového portu
Chybí Ti základy, kup si a nastuduj Linux - Začínáme programovat, překlad 4. vydání (beginning-linux-programming.pdf), určitě se Ti v knihovně neztratí a je tam dost věcí moc pěkně vysvětleno. Rozhodně nemůžeš stavět na útržkách, které posbíráš na fórech.
3.3.2010 12:09 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: asynchronní čtení ze sériového portu
muzu vedet co je aio?
asynchronní i/o
mam to brat jako doporuceni, ze jsou lepsi a podivat se na ne?
ano
In Ada the typical infinite loop would normally be terminated by detonation.

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.