Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск
Текущее время: 17 окт 2019, 10:23




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: запись в /dev/tty/S...
СообщениеДобавлено: 28 дек 2010, 01:06 
Увлекающийся
Аватара пользователя

У нас с: 06.09.2008
Сообщения: 80
Откуда: МИНСК
есть непонятный глючок, с которым пока не могу побороться
после записи в tty "fd" происходит "пролёт" установленной задержки удержания уровня DTR.
Код:
void sendtomoto(int serial,unsigned char *data, int len )
{
   set_DTR( 1 , &serial);
   usleep(1000);
        write(serial,&data[0],len);
        tcdrain(serial);
   usleep(10000);
   set_DTR( 0 , &serial);
}

порт открыт как
Код:
 fd = open(RADIODEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK | O_NDELAY);
 c_cflag = BAUDRATE | CS8 |  CLOCAL | CREAD;
 c_oflag = 0;
 c_lflag = 0;
 c_cc[VMIN]=0;
 c_cc[VTIME]=1;

на "приём" работает всё идеально, правда уровня DTR и не требуется. Приём по SIGIO.
комбинация битов c_cflag не влияет CRTSCTS CLOCAL


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 29 дек 2010, 22:31 
Неотъемлемая часть форума

У нас с: 12.08.2003
Сообщения: 250
Интересная тема. Только я вопроса не понял.

Вообще управления веревками RS232 через классические UNIX API это довольно узкая тема. На крайний случай всегда можно полезть "руками" на порты UART (если только речь не об штуках вроде адаптеров USB-RS232).


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 30 дек 2010, 15:16 
Увлекающийся
Аватара пользователя

У нас с: 06.09.2008
Сообщения: 80
Откуда: МИНСК
usleep(10000);
пролетает после записи в уарт как будто нет этой задержки и время удержания DTR
не отрабатывает как надо.
Задержка перед записью в уарт - работает, а после нет !
В принципе, и с таким урезанным временем после записи и слёта уровня DTR работает устройство - но боюсь что на более шустрых машинах может не работать.


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 30 дек 2010, 21:40 
Неотъемлемая часть форума

У нас с: 12.08.2003
Сообщения: 250
А как выглядит set_DTR ?


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 09 янв 2011, 23:53 
Увлекающийся
Аватара пользователя

У нас с: 06.09.2008
Сообщения: 80
Откуда: МИНСК
Код:
// set DTR level, return -1 if error
int set_DTR(int level, int *fd)
{
   int serline;
    ioctl (*fd, TIOCMGET, &serline);
   if (level == 1)
   {
      serline |= TIOCM_DTR;
     return ioctl (*fd, TIOCMSET, &serline);
   }
   if (level == 0)
   {
      serline &= ~TIOCM_DTR;
     return ioctl (*fd, TIOCMSET, &serline);
   }
   return -1;
}

где то так. Ничего умнее не придумал :evil:
А вот слет уровня - возможно при получении сигнала о приёме (выдача байтов отдаётся обратно физически - типа MBUS для сотовых) сносит крышу ядру - sigusr уходит в
Код:
void signal_handler_IO (int status)
{
    wait_flag = FALSE;
}

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


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 22 янв 2011, 12:38 
Увлекающийся
Аватара пользователя

У нас с: 06.09.2008
Сообщения: 80
Откуда: МИНСК
как обычно, отвечаю сам себе
usleep убивается сигналом.

PS админы - при входе на форум - поменяйте картинки на читаемые - или вы так сс..те что бот зайдет, что человек не понимает что написано ?


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 25 янв 2011, 10:26 
Администратор
Аватара пользователя

У нас с: 09.09.2001
Сообщения: 1338
Информация полученная самостоятельно запоминается лучше. Спасибо, что не забыл ответ выложить.

P.S. smart, если не читается, то на самой капче есть кнопочка "обновить", которая показывает другую картинку. Картинки генерируются внешним сервисом. Так что хватить сс..ть в муку и поднимать пыль.

_________________
usually I'm kind


Вернуться к началу
 Не в сети Профиль Личный альбом  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 28 янв 2011, 00:17 
Увлекающийся
Аватара пользователя

У нас с: 06.09.2008
Сообщения: 80
Откуда: МИНСК
хм, это понятно, что кнопачка, да вот пока пять раз нажмешь и получишь читаемое, уже начинаешь сомневаться - а надо ли ? :D
Но, сегодня без картинки - спасибо !


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: запись в /dev/tty/S...
СообщениеДобавлено: 29 май 2011, 23:07 
Увлекающийся
Аватара пользователя

У нас с: 06.09.2008
Сообщения: 80
Откуда: МИНСК
сегодня "родил" таки самовосстанавливаемую после сигнала задержку. Был вариант ещё на clock(), но он жрал проц как главный, по плешку.
оба варианта ниже

первый навеян с
http://cc.byexamples.com/2007/05/25/nanosleep-is-better-than-sleep-and-usleep/
Код:
void mysleep(unsigned long mks)
{
struct timespec time,errortime;
if ((mks * 1000) > 999999999)
   {
      time.tv_sec = mks / 1000000;
      time.tv_nsec = 0;
   }
else
   {
      time.tv_sec = 0 ;
      time.tv_nsec = mks * 1000;
   }
while (nanosleep(&time,&errortime) != 0)
   {
      time.tv_nsec = errortime.tv_nsec;
      time.tv_sec = errortime.tv_sec;
   }
}


а ресурсожрущий с http://www.velocityreviews.com/forums/t317055-tip-using-a-delay-in-c.html
Код:
void mysleep(unsigned long u)
{
clock_t end, start = clock();
if (start == (clock_t) -1) return;
end = start + CLOCKS_PER_SEC * (u / 1000000.0);
while (clock() < end) ;
}


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
[ All resources are available under GNU GPL ] [ Support ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]

LVEE Winter LVEE Rambler's Top100