ЗАО «ЗЭО»
Техническая поддержка пользователей => Тион270, Тион-Про270, Сириус270 => Тема начата: bva_rzn от 05 Октября, 2012, 12:47:49
-
Добрый день.
Вопрос такого плана. До этого проблем с COM-портами никогда не было.
Поставил перемычку с Tx на Rx COM3.
ADIS_ver = fopen("ADIS.txt","w");
hCom=CreateFile(TEXT("COM3:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 19200;
dcb.fBinary = TRUE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fAbortOnError = TRUE;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
cto.ReadIntervalTimeout=10;
cto.ReadTotalTimeoutMultiplier = 1;
cto.ReadTotalTimeoutConstant = 100;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
SetCommState(hCom, &dcb);
PurgeComm(hCom,PURGE_TXCLEAR);
PurgeComm(hCom,PURGE_RXCLEAR);
SetupComm(hCom,1024,1024);
SetCommMask (hCom, EV_RXCHAR );
while(p)
{
buf_com_send[0] = 1;
buf_com_send[1] = 3;
n = WriteFile (hCom, buf_com_send, sizeof(buf_com_send), &dwBytesWrite, 0);
SetCommMask (hCom, EV_RXCHAR );
WaitCommEvent (hCom, &dwCommModemStatus, 0);
n = ReadFile (hCom, buf_com_rec, sizeof(buf_com_rec), &dwBytesReceived, 0);
fprintf(ADIS_ver,"%i\n",ADIS_data.s.Version);
PurgeComm(hCom,PURGE_RXCLEAR);
if((c++)>100) {p = 0; fclose(ADIS_ver);}
}
Компилирую проект в VS2005. Переношу на Тион-Про270, там запускаю и Windows CE наглухо зависает. Проблема решается, если снять питание с платы.
До этого все проекты с COM-портом на Тионе-Про270 шли без проблем, всё работало.
Плату Вам возил, сказали, что всё нормально.
Так вот вопрос, в чём может быть проблема?
Может эта проблема быть связана с тем, что брал демонстрационный образ с Вашего сайта, где написано, что они работают ограниченное время, если да, то сколько стоит лицензированный образ для Windows CE 6.0?
Спасибо.
-
COM3 не занят под отладочный порт?
-
нет, HANDLE порта отличный от INVALID_HANDLE_VALUE.
-
Прикрепил к письму проект с этим примером.
У меня Тион не зависает. При запуске отправляется 100 пакетов по 100 байт, потом появляется окно программы (через 40 секунд после старта).
Попробуйте запустить у себя на Тионе.
-
Добрый день!
Разобрался, заработало.
Ещё вопрос.
Для потока считывания данных с COM-порта ставлю приоритет 0;
CeSetThreadPriority(hThread,0);
При этом из COM-порта периодически (около 1,2 с) считываю "битые" данные. При уменьшении приоритета потока количество "битых" данных увеличивается.
Вопрос, можно ли избавиться от сбоев при приёме данных через COM-порт? Эту проблему решаю эксраполяцией нужных данных, но всё-таки, хочется разобраться. И не опасно ли (в плане зависания системы) использовать приоритет 0?
Спасибо.
-
Приоритет ставить в 0 не рекомендуется, об этом написано в документации на ОС. Чем это чревато - сложно сказать.
Попробуйте читать в однопоточном режиме.
При надетой перемычке Rx-Tx тоже есть ошибки? При изменении скорости?