Vladimir Ljaschko (23.05.2011 11:48, просмотров: 220) ответил AlexBi на Вероятно проблема с программным управлением потоком, попадается символ выключения и все останавливается. Это инициализацию порта надо смотреть.
Инициализация +. Описка - вместо 0xffff должно быть 0xfffffffe #define LOCAL_PRINTF_ENABLED
int OpenComPortError(char * com_ptr, int baudrate)
{
dcb=(DCB*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DCB));
dcb->DCBlength=sizeof(DCB);
snprintf(dcb_init_string,STRING_SIZE-1,"baud=%d parity=N data=8 stop=1", baudrate);
BuildCommDCB(dcb_init_string,dcb);
dcb->fNull=TRUE;
port=CreateFile(com_ptr,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(port==INVALID_HANDLE_VALUE)
{
#ifdef LOCAL_PRINTF_ENABLED
printf("\nCan't open serial port\n\n");
#endif
return 1;
}
temp=SetCommState(port,dcb);
if (!temp)
{
#ifdef LOCAL_PRINTF_ENABLED
printf("\nCan't set port parameters\n");
#endif
return 2;
}
ct.ReadIntervalTimeout= 10;
ct.ReadTotalTimeoutMultiplier = 1;
ct.ReadTotalTimeoutConstant = 30; //100;
ct.WriteTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
temp=SetCommTimeouts(port,&ct);
if (!temp)
{
#ifdef LOCAL_PRINTF_ENABLED
printf("\nCan't set correct timeouts\n");
#endif
return 3;
}
temp=SetupComm(port, BUFFER_SIZE, BUFFER_SIZE);
if (!temp)
{
#ifdef LOCAL_PRINTF_ENABLED
printf("\nCan't set buffer size\n");
#endif
return 4;
}
ClearCommError(port, &temp, &ComState);
if (temp)
{
#ifdef LOCAL_PRINTF_ENABLED
printf("\nPort error\n");
#endif
return 5;
}
return 0;
}