/ / Послідовний порт зв'язку, випуск з write () - c, serial-port

Комунікація послідовного порту, випуск з write () -c, serial-port

Я написав програму на C на машині Linux, яка читає і записує в послідовний порт. Він підключений до машини Windows XP, на якій працює якийсь емулятор, який надсилає мої програмні дані.

У моїй програмі є 2 теми, одна для читаннявхід з послідовного порту та обробка його. І потік для цього підключається до серверного сокета і слухає дані, які обробляються, а потім записуються назад на послідовний порт. Обидва ці потоки постійно виконуються в циклі під час виконання.

Проблема, яка у мене виникає, полягає в команді write.

 void writeToPort(unsigned char* buf, int length)
{
int w = 0;
if(fd > 0)
w = write(fd, buf, length);

printf("wrote %d bytesn", w);
}

і я відкриваю порт так

fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);

Перші кілька секунд він функціонуєправильно. Я переконався в гіпертерміналі в Windows, що байти, які я очікую, надсилаються належним чином. Однак, в якийсь момент виклик write () зависне. Інший потік зчитування входу продовжується і читання з послідовного порту працює нормально.

Хтось знає, чому це може статися? Я намагався використовувати мутекси, коли читання чи запис робиться на fd, але це, схоже, не має значення. Це також не має значення, якщо інший потік працює / читається з порту. Будь-які поради чи пропозиції вітаються, дякую

Відповіді:

0 для відповіді № 1

Якби я підходив до вашої проблеми зна високому рівні, я би реалізував базову модель сервера fork, де основна нитка залишається такою ж, як і ваша конструкція (слухає введення через serial). Після того, як воно отримає нове повідомлення, відправте новий процес, щоб зробити обробку, а потім повторити відповідь назад ...

Подивись на Мережеве програмування UNIX Stevena для бібліотеки де-факто для програмування сокетів Unix.