X-Virus-Scanned: amavisd-new at bezeqint.net
Hello, Jurgis Armanavichius! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 16 Aug
2006 12:46:07 +0400:
DO>> А вот в чем вижу смысл, так это в мейках/батниках для DO>> борландовского BC5 (того что свободно раздается).
JA> Логично. Я, помнится, скачал этот компилятор, но еще не применял. JA> Полюбопытствую. Если что получится - обязательно сообщу.
Ок. Я именно на нем сделал dll'ку с реализацией своего протокола.
JA>>> Если нужно, можно применить точный мультимедийный таймер. DO>> Значит его и _надо_ задействовать.
JA> Вообще-то ты совершенно прав. Просто мне настолько точно не нужно JA> было... Hо в целом тут есть определенная проблема. Hе совсем JA> понятно, как правильно организовать такой интерфейс... Hаверное, JA> тут не обойтись без событий (events), что заметно усложнило бы мой JA> пример. Я ведь не даром назвал его "Simplest..." ;-)
Тут тебе видней.
JA> Покумекаю. Если придет в голову хорошая идея - попробую сделать JA> "Simplest..." версии 2 :-)
DO>> Именно эту задачу и призван твой пример решить. И хотя лично я свою DO>> уже решил, подобные вопросы тут возникают регулярно и хорошо иметь DO>> готовый пример ответа на них
JA> Да, логично. Хотя получение достаточно точного значения таймаута - JA> далеко не тривиальная задача. Тут ведь дело еще и в том, что таймаут JA> получения байта из COM-порта может быть точным, а прикладная JA> программа может быть "проквантована" тем самым 20 ms виндовозным JA> квантом :-)
У меня все достаточно просто. Сеть, построенная на UART'ах опрашивается центром (компьютером в данном случае) точка за точкой параметр за параметром. Посылается пакет, ожидается ответ. Соответсвенно я в функциях своей dll и реализую этот полный акт обмена, обеспечивая ожидание вызовами
timeBeginPeriod(1); ....
Sleep(1); .....
timeEndPeriod(1);
На сколько это корректно и идеологически правильно, я к сожалению не знаю, но практически это и работает и не грузит комп. Возможно, запуск чего-то сильно жрущего ресурсы компа попортит времянку, но мне это не особо критично. Если юзер это сделает - ССЗБ. Обычная работа в эксплорере, офисе и т. п. обмену не мешает. А вот то, что "надстройка" над моей dll вызывает ее функции со своим таймингом - это уже ее проблема. Это может быть сделает опрос более медленным, чем в принципе возможно, но это не приведет к большому количеству ошибок при связи из-за непопадания в таймауты.
JA>>> Мне было совершенно без разницы: не придет ожидаемый байт за время JA>>> 200 ms или его не будет все 300. Если же кому-то вдруг понадобится JA>>> очень точно задавать время таймаута, то вполне можно сделать так, JA>>> как ты говоришь.
Очень точно и не надо, но дискретность в 10-20ms - это перебор.
DO>> Так я и сделал, но хотел бы видеть более профессиональное решение, DO>> я-то в подоконном программировании даже не любитель, так, погулять DO>> вышел.
JA> Hе знаю, возможно-ли вообще профессиональное решение с применением JA> очень простого (простейшего!) класса работы с COM-портом.
Наверное возможно, и я не думаю, что дело в классах. Я свое делал без всяких классов, на обычном С обычными функциями.
JA> Чувствую, что такое решение должно быть интегральным, т.е. раз протокол JA> времязависимый, то именно вокруг него и нужно строить "печку". JA> Hаверное, это сложно...
dima
formatting link