|
Программирование COM под Windows, не могу справится с переполнением приемного буфера |
|
|
|
 |
Ответов
|
Nov 20 2012, 12:20
|

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

|
Цитата(ARV @ Nov 20 2012, 15:19)  я конечно извиняюсь... но нафига вообще открывать порт, если из него не берутся данные? перешла программа в "автономный" режим - закрывать порт, и точка. все, что туда придет, будет сброшено аппаратно, ничего нигде затираться не будет. потребуется снова войти в режим "связи" - заново открывается порт, очищается его буфер (было сказано, как) и работа начинается снова...
что не так в моем рассказе? А вот что не так  . Бывают конструкции внешних устройств, которые питаются за счет сигнальных линий СОМ-порта (т.к., в отличие от USB, питание на этот разъем не подается). К такому решению располагает уменьшение энергопотребления большинства МК (им такой мощности для питания достаточно), но отвращает, что СОМ-порт постепенно выходит из моды, исчезая из стандартных устройств ПК. Часто потупают так - отказываются от хэндшейкинга, а освободившиеся линии DTR и RTS используют для питания. При этом напряжение на них уставливают в "противофазе", чтобы получить побольше разность потенциалов, и тогда из нее можно получить стабилизированное 5 вольт. Закрытие СОМ-порта приведет к тому, что выставленные уровни DTR и RTS изменятся, т.к. закрытый СОМ-порт не держит своих прежних установок. А питание внешнего устройства по многим причинам прекращать бывает нежелательно. Особенно в тех случаях, когда оно работает в ждущем режиме - не постоянно посылки гонит, а лишь в случае наступления того или иного события. Вот и было бы заманчиво установить такой режим (перепрограммирование СОМ-порта без его закрытия), чтобы (временно) отказаться от приема сообщений, но сам СОМ-порт не закрывать, чтобы сохранить уровни DTR и RTS. Всевозможные идеи (а таких можно выдвинуть много) о том, как можно организовать альтернативное питание, не взирая на полярность DTR и RTS, можете оставить при себе. Сейчас же интересует только одна вещь - возможно это сделать программным путем или невозможно. И выяснить этот вопрос хотелось бы раньше, чем брать в руки паяльник и курочить внешнее устройство.
|
|
|
|
|
Nov 20 2012, 12:32
|

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

|
Цитата(Xenia @ Nov 20 2012, 16:20)  А вот что не так  . Бывают конструкции ... Xenia, бывает, что и корова летает... при себе можно вообще оставить все попытки подсказать топикстартеру методы решения его проблемы, ограничившись просто советом найти и исправить ошибку в программе - ведь это очевидно все, не так ли? кстати, топикстартер и просил "временно приостановить прием" - что может быть лучшепроще закрытия порта для этого?!
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Nov 20 2012, 14:52
|

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

|
Цитата(ARV @ Nov 20 2012, 16:32)  Xenia, бывает, что и корова летает... при себе можно вообще оставить все попытки подсказать топикстартеру методы решения его проблемы, ограничившись просто советом найти и исправить ошибку в программе - ведь это очевидно все, не так ли? кстати, топикстартер и просил "временно приостановить прием" - что может быть лучшепроще закрытия порта для этого?! Вы невнимательно читали его просьбу, а потому так неадекватно реагируете. Топикстартер САМ наотрез отказался закрывать СОМ-порт, вот так обосновав свой отказ: Цитата(paskal @ Nov 19 2012, 21:16)  Можно между посылками закрывать порт и открывать когда нужно послать очередной раз. Но это тоже много лишних действий - после очередного открытия надо настраивать таймауты, режимы через dcb. Вот если бы можно было переводить порт как бы в спячку, чтоб он временно ничего не принимал. Но как это сделать я не знаю. Т.е. изначально поставил задачу так, чтобы решение не содержало закрытия порта.
|
|
|
|
Сообщений в этой теме
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   vvs157 Цитата(ARV @ Nov 20 2012, 16:32) что може... Nov 20 2012, 13:08 vvs157 Цитата(paskal @ Nov 19 2012, 20:10) что п... Nov 20 2012, 11:23 zombi Цитата(MrYuran @ Nov 20 2012, 12:39) Откр... Nov 20 2012, 11:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|