проблема класса устройства связи (CDC) с Read

0

Я пытаюсь использовать функцию readfile для чтения данных с устройства CDC в среде WinCE.

BOOL WINAPI ReadFile(
  _In_         HANDLE hFile,
  _Out_        LPVOID lpBuffer,
  _In_         DWORD nNumberOfBytesToRead,
  _Out_opt_    LPDWORD lpNumberOfBytesRead,
  _Inout_opt_  LPOVERLAPPED lpOverlapped
);

Я хотел бы знать, каков предел размера для readbuf. Я отправляю блок из 256 байтов данных в 100 раз, параметр lpNumberOfBytesRead из ReadFile возвращает 173 байта с первой попытки, а 0 - все остальные 99 раз. Пожалуйста, дайте мне знать, что мне не хватает. Также каков размер лимита для "writebuf"? ниже приведен код для открытия порта

    BOOL PortOpen()
    {
    Close();

ComPort = INVALID_HANDLE_VALUE;
    COMMTIMEOUTS ct;




ComPort=CreateFile (TEXT("COM1:"), GENERIC_READ | GENERIC_WRITE,
                     0, NULL, OPEN_EXISTING, 0, NULL);



if (ComPort != INVALID_HANDLE_VALUE) {

    dcb.DCBlength = sizeof (dcb);
    GetCommState (hLocal, &dcb);
    dcb.BaudRate = 115200;
    dcb.fParity = FALSE;
    dcb.fNull = FALSE;
    dcb.StopBits = ONESTOPBIT;
    dcb.Parity = NOPARITY;
    dcb.ByteSize = 8;
    SetCommState (ComPort, &dcb);


    ct.ReadIntervalTimeout = 0;
    ct.ReadTotalTimeoutMultiplier = 0;
    ct.ReadTotalTimeoutConstant = 0;
    ct.WriteTotalTimeoutMultiplier = 0;
    ct.WriteTotalTimeoutConstant = 0;
    SetCommTimeouts (hLocal, &ct);

}

Liang

  • 0
    Если вы использовали CreateFile, чтобы открыть устройство, отправьте этот код.
  • 0
    пожалуйста, проверьте выше
Показать ещё 2 комментария
Теги:
cdc
windows-ce

2 ответа

0
Лучший ответ

Спасибо за ваш ответ! моя проблема решена. WindowCE не поддерживает перекрывающиеся ввода-вывода, чтение и запись должны быть в отделенном потоке. Кроме того, чтобы избежать состояния гонки, я использовал семафор.

Liang

0

Тайм-ауты для операции ReadFile можно настроить с помощью API SetCommTimeouts, вы уверены, что ваш код не вызывает его? В этом случае количество возвращаемых байтов может меняться в зависимости от разных заданных параметров таймаута.

  • 0
    Я думаю, что проблема с записью, я пишу 256 байтов, должно быть четыре 64-байтовых пакета, я получаю подтверждение для первых двух пакетов, проблема начинается с третьего пакета, я продолжаю получать Nake в течение 30 раз, чем Я получаю подтверждение на 31-й попытке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню