Причина
У меня есть подозрение, что в этой строке происходит сбой вашей программы
tmp_receive[dwBytesRead+1]=END_OF_STRING;
Вы определили массив tmp_receive
с элементами 255
, что делает возможные индексы *От 1008 * до 254
.Затем вы инициализировали len
до 255
.Если при вызове ReadFile(...)
доступно 255 байтов для чтения, то dwBytesRead
будет равен 255
, и строка, о которой я упоминал выше, будет выглядеть следующим образом и будет означать, что вы пытаетесь записать в памятьвне рамок массива tmp_receive
.
tmp_receive[256] = END_OF_STRING;
Что касается перезагрузки, я точно не знаю, но, возможно, ваша программа вызывает сбой системы при попытке записи в недопустимую памятьи у вас Windows XP настроена на перезагрузку вместо отображения BSOD .
Решения
Чтобы предотвратить сбой вашей программы, я вижу, что у вас есть 2 варианта.Я не могу сказать, какой из них лучше, поскольку я не знаю, какой формат данных вы ожидаете получить, поэтому вам придется проанализировать результаты каждого варианта и принять решение самостоятельно.
Опция # 1
Используйте число элементов 257
при определении массива tmp_receive
.
Опция # 2
Отнимите 2 от len
при совершении вызова на ReadFile(...)
if (!ReadFile(hSerial,tmp_receive,len-2,&dwBytesRead,NULL))
Дополнительная информация