|
Короче, надо принимать 7 байт каждые 100мс и скоростью 1200бит/с
Написана нижеприведенная прога.
Глюки - теряются данные,
по моему ощущению, если происходит сбой в одном из 7 байт, прога пытается
присоеденить недостающий байт из следующего пакета... если ставить таймауты,
прога не виснет, но выдает много неправильных данных.
Вопрос
1. Как организовать цикл опроса приема данных ?
У меня цикл - опрос по таймеру 50 мс с командами
Сначало инициализируем событие и структуру синхронизации
SetCommMask(port,EV_RXCHAR); // уст маски флага - принят бит
memset(&ovr,0,sizeof(ovr)); // сброс структуры синхронизации
ovr.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); // создание события получения пакета
ReadFile(port,buf_in,7,&bc,&ovr); // запуск чтения порта в асинхронном режиме
Timer1->Enabled=true;
//----------------------таймер ---------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(WaitForSingleObject(ovr.hEvent,10)==WAIT_OBJECT_0)
{
// тут идет обработка данных и отсев по crc
}
ReadFile(port,buf_in,7,&bc,&ovr); // чтение следующего пакета
}
Правильно или организован цикл опроса или чего-нить нехватает внутри ?
Нужно ли закрывать событие каждый раз, сбрасывать, устанавливать структуру или
открывать ?
Например
CloseHandle(ovr.hEvent);
memset(&ovr,0,sizeof(ovr));
ovr.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
ResetEvent(ovr.hEvent); и тд ?
Спасибо за ответ.
PS в синхронном работает, но тогда ничего сделать нельзя, например dsp ;)))
E-mail: info@telesys.ru