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

 
 
> Программирование COM под Windows, не могу справится с переполнением приемного буфера
paskal
сообщение Nov 19 2012, 16:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Проверяю UART некоторого устройства через компьютер. Программа написана на C++ билдере под ХР. Прием - передача в принципе работает. Компьютер посылает блок данных, устройство в ответ шлет свой блок, комп его принимает. Программа при этом работает исключительно в синхронном режиме: пошлет пакет, ожидает ответного пакета.

Но есть еще отдельный режим, когда устройство посылает поток байт, а компьютер ничего с ними не делает. После этого программа перестает работать. Выяснил что это происходит из за переполнения приемного буфера, но вылечить это не могу. Не помогает ни вызов ClearCommError, ни закрытие-открытие порта. Да и не может помочь, т.к. в пошаговой отладке выяснилось что переменная в которой хранился дескриптор порта (полученный вызовом CreateFile) - затирается. Т.е. я в принципе не могу работать с портом. Пробовал устранить переполнение присвоением false в переменной dcb->fAbortOnError - не помогло.
Что еще посоветуете?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Nov 20 2012, 11:19
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



я конечно извиняюсь... но нафига вообще открывать порт, если из него не берутся данные? перешла программа в "автономный" режим - закрывать порт, и точка. все, что туда придет, будет сброшено аппаратно, ничего нигде затираться не будет. потребуется снова войти в режим "связи" - заново открывается порт, очищается его буфер (было сказано, как) и работа начинается снова...

что не так в моем рассказе?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 20 2012, 12:20
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(ARV @ Nov 20 2012, 15:19) *
я конечно извиняюсь... но нафига вообще открывать порт, если из него не берутся данные? перешла программа в "автономный" режим - закрывать порт, и точка. все, что туда придет, будет сброшено аппаратно, ничего нигде затираться не будет. потребуется снова войти в режим "связи" - заново открывается порт, очищается его буфер (было сказано, как) и работа начинается снова...

что не так в моем рассказе?


А вот что не так sm.gif. Бывают конструкции внешних устройств, которые питаются за счет сигнальных линий СОМ-порта (т.к., в отличие от USB, питание на этот разъем не подается). К такому решению располагает уменьшение энергопотребления большинства МК (им такой мощности для питания достаточно), но отвращает, что СОМ-порт постепенно выходит из моды, исчезая из стандартных устройств ПК.

Часто потупают так - отказываются от хэндшейкинга, а освободившиеся линии DTR и RTS используют для питания. При этом напряжение на них уставливают в "противофазе", чтобы получить побольше разность потенциалов, и тогда из нее можно получить стабилизированное 5 вольт.

Закрытие СОМ-порта приведет к тому, что выставленные уровни DTR и RTS изменятся, т.к. закрытый СОМ-порт не держит своих прежних установок. А питание внешнего устройства по многим причинам прекращать бывает нежелательно. Особенно в тех случаях, когда оно работает в ждущем режиме - не постоянно посылки гонит, а лишь в случае наступления того или иного события. Вот и было бы заманчиво установить такой режим (перепрограммирование СОМ-порта без его закрытия), чтобы (временно) отказаться от приема сообщений, но сам СОМ-порт не закрывать, чтобы сохранить уровни DTR и RTS.

Всевозможные идеи (а таких можно выдвинуть много) о том, как можно организовать альтернативное питание, не взирая на полярность DTR и RTS, можете оставить при себе. Сейчас же интересует только одна вещь - возможно это сделать программным путем или невозможно. И выяснить этот вопрос хотелось бы раньше, чем брать в руки паяльник и курочить внешнее устройство.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- paskal   Программирование COM под Windows   Nov 19 2012, 16:10
- - Xenia   Посоветую увеличить размер буфера (можно входного ...   Nov 19 2012, 16:17
|- - paskal   Цитата(Xenia @ Nov 19 2012, 19:17) Посове...   Nov 19 2012, 16:42
|- - Xenia   Цитата(paskal @ Nov 19 2012, 20:42) Нет, ...   Nov 19 2012, 16:52
- - paskal   Таймер там не нужен потому что алгоритм работы пре...   Nov 19 2012, 17:16
|- - Xenia   Цитата(paskal @ Nov 19 2012, 21:16) Можно...   Nov 19 2012, 18:20
|- - zombi   Цитата(Xenia @ Nov 19 2012, 22:20) ... Эт...   Nov 19 2012, 18:50
- - zombi   1. Попробуйте всегда перед началом работы с портом...   Nov 19 2012, 18:18
|- - paskal   Цитата(zombi @ Nov 19 2012, 21:18) 1. Поп...   Nov 19 2012, 19:08
||- - zombi   Цитата(paskal @ Nov 19 2012, 21:55) После...   Nov 19 2012, 19:09
||- - Сергей Борщ   QUOTE (paskal @ Nov 19 2012, 20:55) Не по...   Nov 19 2012, 19:10
||- - paskal   Цитата(Сергей Борщ @ Nov 19 2012, 22:10) ...   Nov 19 2012, 19:39
|||- - XVR   Цитата(paskal @ Nov 19 2012, 23:39) Ну а ...   Nov 20 2012, 08:50
||- - paskal   дубль. сорри.   Nov 19 2012, 19:42
||- - paskal   Цитата(Сергей Борщ @ Nov 19 2012, 22:10) ...   Nov 20 2012, 15:24
|- - MrYuran   Цитата(zombi @ Nov 19 2012, 22:18) 2. Не ...   Nov 20 2012, 09:39
- - dac   ТС походу объявил в проге массив, и считывает в не...   Nov 20 2012, 10:36
|- - ARV   Цитата(Xenia @ Nov 20 2012, 16:20) А вот ...   Nov 20 2012, 12:32
|- - vvs157   Цитата(ARV @ Nov 20 2012, 16:32) что може...   Nov 20 2012, 13:08
|- - Xenia   Цитата(ARV @ Nov 20 2012, 16:32) Xenia, б...   Nov 20 2012, 14:52
- - vvs157   Цитата(paskal @ Nov 19 2012, 20:10) что п...   Nov 20 2012, 11:23
- - zombi   Цитата(MrYuran @ Nov 20 2012, 12:39) Откр...   Nov 20 2012, 11:53


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 05:55
Рейтинг@Mail.ru


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