Заголовок сообщения: Программирование СОМ-порта на С++ начинающему! Помощь нужна!
Добавлено: Пт дек 10, 2010 12:34:57
Родился
Зарегистрирован: Ср май 06, 2009 08:29:23 Сообщений: 3
Рейтинг сообщения:0
Помогите, пожалуйста, научиться программировать на С++ (MS Visual C++2010) COM-порт. Причем интересует глубокое понимание процессов, отчасти основы программирования и архитектуры компьютером (основная база есть, немного программирую МК на Ассемблере). Может где-то что-то почитать и т.п. Может кто-то сможет прокурировать меня в этих вопросах. В долгу не останусь)))) В будущем хочу использовать USB-порт как виртуальный СОМ-порт через FTDI. Вообщем буду признателен за любую помощь!
Не слишком давно писал небольшое приложение, которое сидит в трее и притворяется winlirc-ом. Прослушивая при этом виртуальный (или реальный) ком порт - cdc usb (или hid usb - на выбор) и работая при этом как tcp сервер - пересылая видоизмененные данные клиентам, поступивших с порта. В MVS2005... Учится, конечно быстрее всего по статьям в нете. Но толковых мало, а ньюансов много. В частности, передача данных от потока чтения кома-а (критические секции), нюансы связанные именно с cdc... Делал через апи, ибо ни одна библиотека не работала как мне нужно, либо платные... Если что, спрашивайте...
_________________ Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
Добавлено: Пт дек 10, 2010 18:41:47
Родился
Зарегистрирован: Ср май 06, 2009 08:29:23 Сообщений: 3
Рейтинг сообщения:0
Друзья, может кто поделиться своим опытом! Как и где вы добывали знания? С какими проблемами сталкивались в освоении программирования СОМ порта и т.п.? Что читали и и где учились?
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
В будущем хочу использовать USB-порт как виртуальный СОМ-порт через FTDI.
Реальный и виртуальный COM - разные вещи. Капитан Очевидность подсказывает, что для работы с микросхемами FTDI надо читать D2XX programmer's guide (это мануал на библиотеку от FTDI для работы с их микросхемами) и даташиты на сами микросхемы (самая распротраненная FT232R). Можно, конечно, и WinAPI использовать (гуглите функции CreateFile(...), WriteFile(...), ReadFile(...), CloseHandle(...) ), но специальная библиотека от FTDI дает гораздо большие возможности.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Гораздо больше возможностей она даёт по не-компортовым вещам. В режиме «комп-порта» там в основном эмуляция того же, что в WinAPI плюс возможность читать/писать EEPROM-ку и уменьшить время таймаута отправки в комп недозаполненого буфера в микросхеме. По умолчанию 16 милисекунд и это крепко садит пропускную способность. Но EEPROM-ку читать-писать нужно сначала придумать для чего, а таймаут можно раз и навсегда уменьшить в свойствах порта в windows.
Более того, я на этот таймаут и не нарывался вообще, хотя программа для работы с COM-портом через WinAPI была написана, пожалуй, до того, как миросхемы FTDI появились в природе.
Просто у меня была ещё под Win98 выписана событийная работа с COM-портом и применён пакетный протокол, основанный на рамке SLIP (её же Леонид Иванович в wake использовал). Любой пакет заканчивается флаговым байтом SLIP_END. Ком-порту по WinAPI при инициализации DCB устанавливается event char на этот флаговый байт SLIP_END. Программа, точнее, поток обслуживания COM-порта, не дёргается за каждым байтом, а через WaitCommEvent (в случае работы через OVERLAPPED IO - через WaitForMultipleObjects) ждёт события прихода концевого флага. Потом смотрит, сколько у Win в буфере ком-порта набралось данных и вычитывает ровно столько одним махом, потом разбирает.
Ну так вот этот же event character при работе с виртуальным портом FTDI передаётся через VCP драйвер в микросхему и та по этому байту делает отправку как по активации ножки send immedite — не ожидая даже минимальное время таймаута заполнения FIFO.
Программа, написанная таким образом в 1997-98 году для обычного ком-порта, забегала с FT8U245 на отличных скоростях Ограничителем выступала мега128.
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Это два варианта моих отрывков кода, который должен сначала открыть порт, за тем застрять в цикле, пока что-нибудь не придёт. Используется тут WinAPI. Настройки битрейта порта и прочих его параметров, тут я не привёл. Но там вроде всё нормально. Всё работает нормально, но если нагрузить процессор хотя бы на 60-70% так начинаются траблы. Не принимаются все байты с порта. И количество принятых байтов может отличаться от содержимого в RcvCounter. Что мне сделать, чтобы от этого избавиться. Стабильность приёма данных очень важна.
_________________ I am DX168B and this is my favourite forum on internet!
Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
Добавлено: Пт дек 24, 2010 17:56:00
Друг Кота
Карма: 25
Рейтинг сообщений: 96
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4470 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Объяснять долго. Короче...... вот в архиве мой изврат (класс для работы с COM портом) Можешь откомпилировать её как DLL (он и рассчитан на компиляцию в DLL файл) Ищи в классе функцию:
А можно подробнее. мне не все понятно. И главное: так ли работает код в линукс системах? Я просто хочу написать драйвер для ком мыши в современной Mageia 7. Заранее огромное спасибо за подсказки.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения