Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с буфером.  (Прочитано 7113 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Karloson
Гость
« : 16-03-2007 13:56 » 

Подскажите кто чего знает\реализововал\ткните_носом как организовать работу с буфером.
Есть устройство USB с которого, естественно, считываются данные драйвером. Эти данные через буфер передаются в пользовательскую программу - типовая работа. Длинна буфера фиксирована и потеря данных допускается, но очень не желательна.
Как поступить (в драйвере), если программа не успевает считать данные и буфер переполняется?
Что в таком случае, по аналогии, происходит с буфером RS232, когда в него постоянно посылаются данные из вне?

ЗЫ: вопрос больше теоритический.
« Последнее редактирование: 16-03-2007 14:06 от Karloson » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-03-2007 14:54 » 

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

1. буфер - размер буфера -указатель начала - число необработанных данных - флаг
2. буфер - размер буфера - указатель начала - указатель конца - флаг

ЗЫ: ответ больше практический.

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #2 : 16-03-2007 15:00 » 

Как поступить (в драйвере), если программа не успевает считать данные и буфер переполняется?

ни как Улыбаюсь, разве что проинформировать пользователя о переполнении буфера

Обычно делают два буфера: один подсовывают тому кто читают, а в другой пишут (потом, когда буфер для записи полон, их меняют). Если средняя скорость записи в буфер, выше средней скорости чтения из буфера, то тут ничего не поделаешь (это как в задаче с двумя трубами Улыбаюсь : рано или поздно бассейн переполниться  ).
Размерами буферов, и моментом их переключения можно играться для того, чтобы "сгладить" пиковые скорости.
Например если в течении секунды данные вваляться с большой скоростью, а потом 10 секунд затишья Улыбаюсь
« Последнее редактирование: 16-03-2007 15:03 от Артем » Записан
Vlaor
Гость
« Ответ #3 : 17-03-2007 06:32 » 

Можно сделать один буфер циклический.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 17-03-2007 10:02 » new

А девайс не поддерживает управление потоком?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines