реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> задержка в отправке пакета из буфера uart, lpc2478 & uClinux
andybeg
сообщение Jul 12 2010, 12:40
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954



возвращаясь к вопросу о подчинённом устройстве - модифицированная отправка работает исправно, устройство получает команду, реагирует соответствующе, но приём который работал раньше не отрабатывает
Цитата
fd_set rfds;

struct timeval tv;

tv.tv_sec = 1;
tv.tv_usec = 0;

FD_ZERO( &rfds );
FD_SET( ttyfd, &rfds );


#ifdef DEBUG
fprintf( stderr, "Waiting for response.\n");
#endif

/* wait for a response */
data_avail = select( FD_SETSIZE, &rfds, NULL, NULL, &tv );

if( !data_avail )
{
bytes_received = 0;
fprintf( stderr, "Comms time out\n" ); <---------- вылетает сюда
}
Go to the top of the page
 
+Quote Post
andybeg
сообщение Jul 16 2010, 06:29
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954



товарищ столкнулся с сабжевой проблемой, покопался в драйвере компорта и нашёл неплохое решение - в коде в 8250.с есть строчки:
Цитата
mod_timer(&up->timer, jiffies + poll_timeout(up->port.timeout) + HZ/5);
и
poll_timeout(up->port.timeout) + HZ/5);


я моём случае меняем на

Цитата
mod_timer(&up->timer, jiffies + poll_timeout(up->port.timeout) + HZ/200);
и
poll_timeout(up->port.timeout) + HZ/200);

и получаем строб в 20 мс, который накрывает посылку длящуюся 9-10мс, с такими показателями можно жить.
товарищ поставил отключение строба прямо в драйвере ... я пока что отключаю после отправки write
Цитата
fd = open("/dev/mem", O_RDWR);
map = mmap(0, getpagesize(), PROT_READ, MAP_SHARED, fd, UnLSR_BASE_ADDR);
if (map == MAP_FAILED)
{
#ifdef DEBUG
printf("Error mmapping the file");
setP01(1,13, 0);
#endif
return 0;
}
data = 1;

//ждём когда в отправляющем буфере появятся данные
goal = 10 * CLOCKS_PER_SEC / 1000 + clock();
while(data)
{
data = (U3LSR)&(1<<6);
res = (U3LSR);
#ifdef DEBUG
printf("\ndata =%x",res);
#endif
if(goal < clock())
{
#ifdef DEBUG
printf("outbuf timeout");
#endif
setP01(1,13, 0);
return 1;
}
}
//------------------------------------------------
#ifdef DEBUG
printf("\n");
#endif
//ждём когда из отправляющего буфера данные уйдут
goal = 10 * CLOCKS_PER_SEC / 1000 + clock();
while(!data)
{
data = (U3LSR)&(1<<6);
res = (U3LSR);
#ifdef DEBUG
printf("\nres =%x",res);
#endif
if(goal < clock())
{
#ifdef DEBUG
printf("sendbuf timeout");
#endif
setP01(1,13, 0);
return 1;
}
}
setP01(1,13, 0);
//------------------------------------------------
if (munmap(map, getpagesize()) == -1)
{
#ifdef DEBUG
perror("Error un-mmapping the file");
#endif
}
close(fd);


Сообщение отредактировал andybeg - Jul 16 2010, 06:35
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th August 2025 - 22:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016