Linux seriovy port
Ladislav Vaiz
spam na nagano.cz
Pondělí Březen 30 15:53:29 CEST 2020
Dne 30.03.2020 v 15:16 Jaroslav Buchta napsal(a):
> Takze v principu muzou 2 aplikace otevrit jeden port zaroven?
Ano, zamykání v linuxu je dobrovolné. Vždyť stačí fork() a hned jsou
všechny soubory otevřené vícekrát. Sériák se zamyká souborem
/var/lock/LCK..ttyS1 .
> Ono to tim ale asi nebude, ta druha aplikace pouziva komunikaci jen v
> pripade, ze dela reset modemu a to je velmi sporadicky - ta funguje
> stylem open-w-r-close. Podle logu casy nekoreluji s chybami.
Pak to tím zřejmě nebude.
> Jeste uplne nechapu API funkci select, ta skonci pri prichodu jednoho
> a vice znaku nebo zadanem timeoutu?
Přesně tak plus dále
> Kdy vznikne chyba EINTR?
Proces dostal signal. Jaký vám řekne program strace (strace program nebo
za běhu strace -p PID)
> A rset je nejake bitove pole se seznamem periferii na ktere se ceka?
Ano
https://linux.die.net/man/3/fd_set
https://linux.die.net/man/2/select
L.
> Pouzita je takto:
> while ((s_rc = select(ctx->s+1, rset, NULL, NULL, tv)) == -1) {
> if (errno == EINTR) {
> if (ctx->debug) {
> fprintf(stderr, "A non blocked signal was caught\n");
> }
> /* Necessary after an error */
> FD_ZERO(rset);
> FD_SET(ctx->s, rset);
> } else {
> return -1;
> }
> }
>
> if (s_rc == 0) {
> /* Timeout */
> errno = ETIMEDOUT;
> return -1;
> }
> #endif
>
> return s_rc;
>
>
>
> Dne 30.03.2020 v 14:29 Ladislav Vaiz napsal(a):
>> Hádal bych, že problém bude čtení z portu - data dostane vždy právě
>> jedna aplikace a to bude ten problém. Lepší by bylo udělat nějakou
>> proxy, která bude znát Modbus.
>>
>> L.
>>
>> Dne 30.03.2020 v 14:20 Jaroslav Buchta napsal(a):
>>> Takova zasadni otazka - lze otevrit port napr. /dev/ttyS1 zaroven z
>>> vice aplikaci? Predpokladam, ze ne ale chova se to divne jako by ano
>>> (je to embeded system na ARM) Zase ale vzhledem k tomu, ze se
>>> rychlost a dalsi parametry nastavuji az po otevreni, tak mi neni
>>> jasne, kdy vlastne k fyzickemu otevreni HW portu dojde?
>>>
>>> Je to modbus-rtu komunikace jako master, pouzivaji ji 2 aplikace,
>>> jedna velmi sporadicky a druha by mela mit port otevreny stale (tu
>>> momentalne ladim, ta druha je trosku black box). Zda se mi divne, ze
>>> by to fungovalo, kazdopadne ta hlavni aplikace s castou komunikaci
>>> nekdy hlasi chybu - bud CRC nebo neshoda cisla funkce, prijata data
>>> v bufferu nedavaji smysl, jedine, co me jeste napada, ze by si do
>>> komunikace nejak vzajemne kecaly...
>>
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list