Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.03.2010, 22:26
|
|
Частый гость
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Как программно организовать передачу и прием данных ft232
Кто работал с встроенными функциями FTDI, подскажите пожалуйста.
Как правильно организовать постоянный мониторинг состояния порта, чтобы по приему байта выполнялись определенные действия?
При использовании FT_SetEventNotification(ftHandle,EventMask,hEvent) ; и WaitForSingleObject(hEvent,INFINITE); (как сказано в документации) возникает зависание программы до прихода байта. Как создать событие чтобы приложение не зависало в его ожидании?
Спасибо.
Последний раз редактировалось tusya83; 24.03.2010 в 12:49.
|
|
|
|
24.03.2010, 12:50
|
|
Частый гость
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
Может кто-нибудь реализовывал подобные задачи с помощью API?
|
|
|
|
24.03.2010, 13:17
|
|
Временная регистрация
Регистрация: 15.06.2006
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Как программно организовать передачу и прием данных ft232
Создайте дополнительный поток и в нем выполняйте ожидание события, либо посмотрите функцию RegisterWaitForSingleObject, кажется она должна подойти.
|
|
|
|
24.03.2010, 13:29
|
|
Частый гость
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
Вы имеете в виду реализацию посредством API функций? Я пробовала организовать отдельные потоки, единственное, что у меня не получилось, так это идентифицировать устройство. Это можно сделать с помощью функций библиотеки d2xx.dll, но при использовании в разных потоках эти функции не работают.
Как можно это сделать в API?
Или может кто-нибудь все-таик работал с функциями FTDI. Наверняка должно быть какое-то решение...
|
|
|
|
24.03.2010, 13:39
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
Используйте функцию FT_GetQueueStatus(), она возвращает число принятых байтов.
Пример на сайте FTDI:
FT_GetQueueStatus(ftHandle,&RxBytes);
if (RxBytes › 0)
{ ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&BytesReceived);
if (ftStatus == FT_OK) { // FT_Read OK }
else { // FT_Read Failed }
}
|
|
|
|
24.03.2010, 14:02
|
|
Частый гость
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
А как сделать так, чтобы порт опрашивался постоянно. Если поместить FT_GetQueueStatus() в обработчик запуска формы, то он сработает один раз.
|
|
|
|
24.03.2010, 14:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
а таймер поставить - я так понимаю, миссион импосибел ?
|
|
|
|
24.03.2010, 14:49
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
1. Если у Вас медленный обмен - можно использовать Timer и опрашивать очередь приёмника по таймеру, например 10 раз в секунду.
2. Можно использовать собственный обработчик события Application.OnIdle и в нём опрашивать порт в фоновом режиме, то есть если пользователь не жмёт кнопки или не дёргает мышку, то порт будет опрашиваться постоянно.
3. Для быстрого обмена можно запустить отдельный Thread и в нём использовать Handle порта, открытого в основном потоке.
|
|
|
|
24.03.2010, 15:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
Код:
|
2. Можно использовать собственный обработчик события Application.OnIdle и в нём опрашивать порт в фоновом режиме, то есть если пользователь не жмёт кнопки или не дёргает мышку, то порт будет опрашиваться постоянно. |
а вот захочется винде окно перерисовать ? - в чужом приложении - и получится пауза 30 миллисекунд, как минимум.
Из области - вредных советов, имхо.
Второй поток, да, согласен... Но, как сказано выше, чревато.
Я бы на месте топикстартера ушел бы от этого фтди, если нужно быстро и срочно. Но - насколько быстро и на сколько срочно ?
В граммах, пожалуйста...
|
|
|
|
24.03.2010, 15:54
|
|
Частый гость
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как программно организовать передачу и прием данных ft232
Сообщение от urry
|
Я бы на месте топикстартера ушел бы от этого фтди, если нужно быстро и срочно. Но - насколько быстро и на сколько срочно ?
|
Что Вы имеете в виду? Скорость порядка 100кбит, то есть по таймеру не получается, уже об этом думали.
Хочется сделать по уму, то есть потоками. Но у меня проблема в том, что не получается программно определить номер ком-порта, на который встала микросхема, чтобы потом обрабатывать как ком-порт с помощью API.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:38.
|
|