![]() |
|
|
#1
|
||||
|
||||
![]() Уже голову сломал.
Есть устройство на базе широко известного в узких кругах USB-UART переходника (он же виртуальный COM порт) FT232RL. И пишу программу для работы с этим устройством. И всё вроде работает. У меня (Win7 x64). На компьютере друга (нетбук) - ну ни в какую. Прием данных осуществляется так: Код:
if not ReadFile(hCom, Buf, dwRead, dwRead, @OverlapRead) then begin ShowMessage('Ошибка при чтении данных.'); ...// работаем с ошибкой end; Думал, что дело в его винде (WinXP SP2). Но нет - поставил себе эту же самую винду (с его диска) на виртуальную машину - всё работает. В чём может быть дело? Программу изначально писал как раз другу, будет очень печально, если на его компе так и не запустится. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 03.07.2011 в 18:01. |
#2
|
||||
|
||||
![]() Режим ком-порта устанавливаешь? как?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
||||
|
||||
![]() Устанавливаю, стандартно:
Код:
if not GetCommState(hCom, Dcb) then begin StandardError('Не удалось получить состояние порта.'); exit; end; Dcb.BaudRate := CBR_9600; Dcb.Parity := NOPARITY; Dcb.ByteSize := 8; Dcb.StopBits := ONESTOPBIT; if not SetCommState(hCom, Dcb) then begin StandardError('Не удалось установить состояние порта.'); exit; end; З.Ы. StandardError - это мой обработчик, там вывод сообщения и освобождение ресурсов. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 03.07.2011 в 18:37. |
#4
|
||||
|
||||
![]() Цитата:
У меня есть опыт работы с таким. -Первое что могу посоветовать, это попробовать обмениваться данными с устройством используя программу-терминал. С помощью нее можно посылать на устройство данные и принимать. Классная штука. Помогает отладить протокол и проверить связь с устройством. -Второе. На сколько я понял ты используешь стандартное API? Лучше используй готовые компоненты, например: скачать. Последний раз редактировалось Developer, 03.07.2011 в 18:55. |
#5
|
||||
|
||||
![]() Терминал на его компе поюзать не додумался - при встрече попробую, спасибо что напомнил.
А насчет второго - не люблю я лишние компоненты ![]() ![]() jmp $ ; Happy End! The Cake Is A Lie. |
#6
|
||||
|
||||
![]() Bargest , вообще-то если используешь асинхронный режим (@OverlapRead), то ReadFile запросто может вернуть ошибку, но при этом GetLastError возвратит ERROR_IO_PENDING. тогда данные можно получить через WaitForSingleObject/GetOverlappedResult.
http://msdn.microsoft.com/en-us/libr...67(VS.85).aspx Пишу программы за еду. __________________ |
#7
|
||||
|
||||
![]() Я предварительно ожидаю вечность (infinite), пока не придут данные, через WaitForSingloObject. Потом получаю количество байт в очереди при помощи ClearCommError.
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 03.07.2011 в 19:37. |
#8
|
||||
|
||||
![]() а GetLastError что говорит?
Код:
ShowMessage(SysErrorMessage(GetLastError)); Пишу программы за еду. __________________ |
#9
|
||||
|
||||
![]() Завтра попробую на его компе, посмотрю.
jmp $ ; Happy End! The Cake Is A Lie. |