Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.187.186] |
|
Сообщ.
#1
,
|
|
|
???
Пожалуста помогите СОМ-портом, никак не получается точно отловить момент передачи в линию RS-232 последнего бита последнего байта посылки, оптправляемой с помощью API фунции WriteFile, получаются задержки в 1мс и более, которые слишком ощутимы. В этот момент планируется переключать состояние сигнала DTR. |
Сообщ.
#2
,
|
|
|
задержка в 1 мс при отправке последнего бита или между кадрами?
|
Сообщ.
#3
,
|
|
|
С помощью WaitCommEvent с маской EV_TXEMPTY ожидаю окончания передачи. На деле функция срабатывает когда передается лишь первый бит последнего байта посылки (10-15 байт). Далее с помощью QueryPerformanceCounter я ожидаю передачи остальных бит. При скорости СОМ равной 9600 ожидание = (1/9600)*(7 бит + 1 стоповый) >> примерно = 0,8 мс. На деле ожидание пляшет 0,8 .. 3,0 мс. Может это из-за переключения потоков в Windows. WaitForSingleObject функция - же не походит как раз из-за минимум 1 мс задержки, которую она способна реализовать да еще с большой погрешностью.
|
Сообщ.
#4
,
|
|
|
можно написать весь обмен с портом на ассемблере, это не очень сложно. Для того чтоб винды не чудили с переключением потоков, можно использовать инструкции cli и sti, но работать будет только в 98 винде! В 2000 можно поставить приоритет процесса и нити по максимуму, а для прямого доступа к портам с помощью инструкций in и out поискать в инете драйвер dlportio.sys.
|