flare
Гость
|
|
« : 22-12-2003 10:40 » |
|
Кто-нить знает, почему при чтении из СОМ порта съедаются байты, в которых записан 0х00? флаг fNull в структуре DCB равен false могет быть еще что-то влияет на процесс чтения?
|
|
|
Записан
|
|
|
|
Lex
|
|
« Ответ #1 : 22-12-2003 10:46 » |
|
посмотри чему равен флаг fBinary. должен быть 1
|
|
|
Записан
|
Megabyte be with you!
|
|
|
flare
Гость
|
|
« Ответ #2 : 22-12-2003 10:48 » |
|
fBinary==true
|
|
|
Записан
|
|
|
|
GlukSoft
Главный специалист
Offline
Пол:
|
|
« Ответ #3 : 22-12-2003 11:20 » |
|
flare, скинь кусок кода по инициализации порта, в частности DCB.
|
|
|
Записан
|
Fatal error C1: Brain expected
|
|
|
flare
Гость
|
|
« Ответ #4 : 22-12-2003 11:27 » |
|
m_hComm=CreateFile(lpCommPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); if(m_hComm==INVALID_HANDLE_VALUE) return FALSE; DCB dcb; dcb.BaudRate = 115200; dcb.ByteSize = 8; dcb.DCBlength = sizeof(DCB); dcb.Parity = false; dcb.fBinary = true; dcb.fOutxCtsFlow = false; dcb.fOutxDsrFlow = false; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fDsrSensitivity = false; dcb.fTXContinueOnXoff = false; dcb.fOutX = false; dcb.fInX = false; dcb.ErrorChar = false; dcb.fNull = false; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fAbortOnError = false; dcb.StopBits = 2; COMMTIMEOUTS TimeOuts; TimeOuts.ReadIntervalTimeout = 1; TimeOuts.ReadTotalTimeoutConstant = 10; TimeOuts.ReadTotalTimeoutMultiplier = 1; TimeOuts.WriteTotalTimeoutConstant = 3; TimeOuts.WriteTotalTimeoutMultiplier = 1; SetCommTimeouts(m_hComm,&TimeOuts); SetCommState(m_hComm,&dcb); memset(&rxOverLapp,0,sizeof(rxOverLapp)); rxOverLapp.hEvent = CreateEvent(NULL,false,false,NULL); memset(&txOverLapp,0,sizeof(txOverLapp)); txOverLapp.hEvent = CreateEvent(NULL,false,false,NULL); SetupComm(m_hComm,0x4000,0x4000); SetCommMask(m_hComm,EV_RXCHAR|EV_TXEMPTY|EV_BREAK); PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
|
|
|
Записан
|
|
|
|
Mouse
Молодой специалист
Offline
|
|
« Ответ #5 : 22-12-2003 11:51 » |
|
Попробуй включить DtrControl и RtsControl. Еще у меня стоповый бит был 1. Если честно, я особо с этим не разбирался, просто у меня с такой конфигурацией все работает... :oops:
|
|
|
Записан
|
|
|
|
GlukSoft
Главный специалист
Offline
Пол:
|
|
« Ответ #6 : 22-12-2003 12:14 » |
|
flare, Microsoft рекомендует DCB инициализировать следующим образом FillMemory(&dcb, sizeof(dcb), 0); GetCommState(hComm, &dcb); dcb.DCBlength = sizeof(dcb); и т.д. зачем у тебя dcb.fTXContinueOnXoff = false; думаешь что комп не успеет обработать?
|
|
|
Записан
|
Fatal error C1: Brain expected
|
|
|
Lex
|
|
« Ответ #7 : 22-12-2003 12:35 » |
|
fDtrControl и fRtsControl влияют только на линии RTS и DTR соответственно.
Рекомендация использую вместо числовых значений предопределенные константы. и обрати внимание что есть два поля fParity(TRUE|FALSE) и Parity(EVENPARITY|ODDPARITY|NOPARITY|MARKPARITY|SPACEPARITY). У тебя Parity = false. еще одно замечание false и FALSE не одно и тоже. false это значение тип boolean. FALSE define определенный как 0.
|
|
|
Записан
|
Megabyte be with you!
|
|
|
flare
Гость
|
|
« Ответ #8 : 23-12-2003 21:30 » |
|
ЗАРАБОТАЛО!!!!!!!!!!!!!!! Вся попа была в том, что поле dcb.StopBits = 1 вовсе не значит, что стоповый бит будет 1, как я это предполагал. На самом деле нужно было dcb.StopBits = ONESTOPBIT, который по дефайну определяется в ноль.
Спасибо Всем, а в особенности Lex'y за рекомендацию про константы
|
|
|
Записан
|
|
|
|
Anonymous
Гость
|
|
« Ответ #9 : 24-12-2003 17:13 » |
|
Вся попа была в том, что
Вот так всегда, ищешь в одном месте, а оно вон как вылазит
|
|
|
Записан
|
|
|
|
FoxVID
Гость
|
|
« Ответ #10 : 30-12-2003 21:04 » |
|
flare, а так ли необходимо определять все параметры структуры DCB? Попробуй включить DtrControl и RtsControl. Еще у меня стоповый бит был 1. Если честно, я особо с этим не разбирался, просто у меня с такой конфигурацией все работает... Вообще-то конкретная реализация обмена через порт может исключать DTS || RTS. С этим, к примеру я столкнулся при исследовании ККМ Меркурий 112Ф. Тут вообще используются только RX & TX. Так что, уважаемый Arhangel, вы бы лучше не давали этот совет. Абы как бы все могут, а по существу...
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #11 : 30-12-2003 22:06 » |
|
FoxVID, да необходимо, ибо их могла сменить другая программа до тебя отработавшая и ты грубо говоря будешь долго думать - почему ты не имеешь, что хотел , а имеешь то , что имеешь
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
FoxVID
Гость
|
|
« Ответ #12 : 02-01-2004 08:21 » |
|
их могла сменить другая программа до тебя отработавшая
Что да, то да. На эти грабли я и наступил. :oops: Век живи, век учись, и все равно PS Вообще-то мне интересно, есть ли люди, которые учатся не на своих ошибках :?:
|
|
|
Записан
|
|
|
|
flare
Гость
|
|
« Ответ #13 : 04-01-2004 20:47 » |
|
А мы тут, собственно, чем занимаемся?
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #14 : 04-01-2004 21:27 » |
|
FoxVID, практически нету Так и говорят - умный учится на чужих ошибках, что бы можно опознав свою - знать что делать, а дурак - совершая свои ошибки не понимает, что это ошибка и продолжает их делать не один раз пока не поймет
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
|