LINUX.ORG.RU

OpenWRT программирование последовательного порта

 ,


0

1

Добрый день.

Столкнулся с такой проблемой: Работаю в opеnWRT 15.05. Программирую обмен данных по последовательному порту. Инициализировал порт, инициализация прошла успешно.

Далее я в цикле начинаю посылать пакеты и жду ответа от другого устройства таким образом

while(1)

{

//TO DO: Формирование пакета

n = write(Mb_device,trame,len);

if(n!=len)

printf(«Send Error = %d\n»,n);

FD_ZERO(&set); /* clear the set */ FD_SET(Mb_device, &set); /* add our file descriptor to the set */

timeout.tv_sec = 0; timeout.tv_usec = 100*1000;

rv = select(Mb_device + 1, &set, NULL, NULL, &timeout); if(rv == -1) perror(«select»); /* an error accured */ else if(rv == 0) printf(«timeout»); /* a timeout occured */ else /* read data */ k = read(Mb_device,read_data,128);

}

Программа проходит несколько циклов и завершается сообщением I/O possible

В чем может быть проблема?

Если честно...

У Вас код, мягко говоря, «не очень». Я бы рекомендовал Вам посмотреть http://davmac.org/davpage/linux/async-io.html (чисто для начала) и перейти к асинхронному вводу-выводу вместо дурацких типа «задержек».

Прилетающий Вашему приложению сигнал говорит о том, что ввод-вывод возможен, но вот тут-то Ваша приблуда падает. Код говно. Асинхронный ввод-вывод возможен и под OpenWRT в том числе. Лично использовал. Успехов.

Moisha_Liberman ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.