Я понимаю все должно быть банально, я опять вернулся к варианту программы без потоков. Смотрите объясню свою проблему детальнее. Отправка в порт происходит нормально а вот прием...иногда принимает , иногда нет , когда я исползую REadFile, вот смотрите:
Вот две функции чтения и записи, которые нужно реализовать:
функция вывода работает вроде нормально... void outbyte(uint8_t value) { uint32_t i = 0; DWORD temp; buf_out[0] = value; out_numbytes = 1;
ClearCommError(handle, &temp, &ComState); if(!temp) { WriteFile(handle, buf_out, out_numbytes, &numbytes_ok, &Overlap); }
do { if(i++ > 40) { break; } ClearCommError(handle, &temp, &ComState); for (unsigned int i = 0; i < 40; i++); } while (ComState.cbOutQue > 0);
}
а вот функция приема иногда не принимает, хотя снифером я смотрю что данные поступают... uint8_t inbyte(uint8_t timeout) { DWORD temp; uint32_t i = 0; uint16_t in_ok;
in_numbytes = 1; //количество ожидаемых принятых данных
do { if(i++ > 50) { break; //вот здесь вылетает } ClearCommError(handle, &temp, &ComState);//получаю состоянии порта for (unsigned int i = 0; i < 40; i++); //задержка } while (ComState.cbInQue != in_numbytes);
if((i < 50) & (!temp)) { ReadFile(handle, buf_in, in_numbytes, &numbytes_ok, &Overlap); } }
Как корректно пользоваться функциями ReadFile, WriteFile, ClearCommError чтобы порт не выс и корректно принимал байты. .
|