Здравствуйте!
ОС linux, тион-про2.
Пишу программу для общения с датчиком по RS485. Заметил интересную особенность при записи в порт ttyAM2. Я отправляю 2 байта в порт, а осциллографом вижу, что эти 2 байта отправляются повторно каждые 10мс (см аттач) до тех пор, пока порт не закроется. А функция read возвращает ошибку (Resource temporarily unavailable). Осциллографом смотрел и на выходе RS-485 и на выходе TXD2. Но если я запускаю ту же самую программу для ttyAM1, то эти 2 байта отправляются один раз.
Код функции, которая отправляет данные:
int fd;
struct termios options;
unsigned char buf[50];
int res;
ssize_t sz;
fd = open(config->rs485_port, O_WRONLY | O_NOCTTY | O_NDELAY);
if (fd < 0)
{
return 1;
}
tcgetattr(fd, &options);
options.c_cflag |= (B19200 | CS8 | CLOCAL | CREAD);
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &options);
fsync(fd);
tcflush(fd, TCIFLUSH);
sz = write(fd, "DO", 2);
if(sz!=2)
{
Message("write sz=%d\n",sz);
close(fd);
return 3;
}
sleep(3); //wait for sensor data
sz = read(fd, buf, 50);
if (sz <= 0 || sz > 100)
{
Error(errno, "read. sz=%d",sz);
close(fd);
return 2;
}
close(fd);
Почему такое может происходить?