Чтение с серийных отпечатков мусора - PullRequest
1 голос
/ 20 мая 2011

Я пытаюсь настроить последовательную связь между dsp и моим компьютером.

DSP отправляет значение 16-битного счетчика, которое увеличивается каждый раз при отправке. Так что это просто счет ...

Вот что я получаю на своем компьютере:

3335 3336 3337 3338 36388 46920 16372 46919 3339 3340 3341 3342 36388 46920 16372 46919 3343 3344 4621 3341 36388 46920 ...

Итак, мы можем увидеть счетчик, который прерывается теми 4 значениями, которые появляются из ниоткуда ...

Моя программа настроена на

fd = open(device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, FNDELAY);
termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B4800);
cfsetospeed(&options, B4800);
options.c_cflag |= (CLOCAL | CREAD | CS8);
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag |= (IXON | IXOFF | IXANY);
tcsetattr(fd, TCSANOW, &options);

DSP отправляет 4800 / 8N1.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Я сильно подозреваю, что они отправляются DSP, драйверы последовательного порта на данный момент довольно хорошо отлажены.

Другие возможности состоят в том, что вы читаете последовательный порт из нескольких потоков одновременно (возможно, в одном и том же процессе, а может и нет). Откройте порт исключительно, чтобы убедиться, что это не ваша проблема.

Или, возможно, вы читаете ожидаемые значения из последовательного порта и добавляете мусор в некоторую буферизацию / организацию очереди в вашей программе. Возможно, вы получаете частичное чтение (из-за тайм-аута приема).

Помните, что возвращаемое значение read измеряется в байтах , а не 16-битных значениях . Если бы вы получали 8 байтов, а затем печатали 8 шортов, вы бы видели такое поведение. (Однако проблемы с двумя последними значениями, 4621 3341, в «последовательности» не могут быть объяснены таким образом. ) Судя по комментариям ФП, это является точной причиной проблемы

Ни в коем случае эта проблема не связана с конфигурацией последовательного порта.

0 голосов
/ 21 мая 2011

Lol Мне очень жаль, причина проблемы была в другом месте, я делал

unsigned short buffer[4];
n = read(..., buffer, ...); // n in bytes !

Затем

for (int i = 0; i < n; ++i) 
    dump << buffer[i] << std::endl;  // index in 16-bits !

Так что я всегда читал свой буфер из 4 элементов+ 4 значения (из стека, я думаю) ...

Спасибо за ваши ответы, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...