Здравствуйте.
Может кто сталкивался с таким явлением, а может я что-то не так делаю...
Есть программа на СИ, которая работает на роутере и читает даные от ардуиы (/dev/ttyUSB), делается так:
...
int open_port()
{
int fd;
fd = open(device, O_RDWR | O_NOCTTY);
...
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cc[VMIN] = 1;
options.c_cc[VTIME] = 1;
options.c_lflag = ICANON;
options.c_oflag = 0;
options.c_oflag &= ~OPOST;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &options);
...
...
while(!VINTR)
{
int bytes = 0;
memset(bRead, 0, sizeof(bRead));
if((bytes = read(fd, bRead, BUFSIZE))==-1) // read()
{
printf("Error_Read_from_Arduino\n");
}
printf("Rec: %s", bRead);
...
Из ардуины строка отправляется вот так:
Serial.print(1);
Serial.print(" ");
Serial.print(2);
Serial.print(" ");
Serial.print(3);
Serial.println();
То есть на конце - \r\n.
Если запускать прогу на большом компе, то строка принимается полностью, то есть «1 2 3\r\n», bytes говорит что прочитано 7 символов.
Если запускать прогу на роутере, то принимается строка - «1 2 3\r» (6 символов), а потом отдельно принимется символ «\n».
То есть получается, что как будто функция read работает по другому.
Скажите, почему так? Или я где-то ошибаюсь?
Или надо где-то указывать компилятору, что считать концом строки?
Для компа компилятор gcc 4.8, для роутера gcc 4.6.