ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
255091 Топик полностью
Vladimir Ljaschko (23.05.2011 11:48, просмотров: 180) ответил 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; }