Хорошо, у меня проблема. Я программирую что-то, что использует симулятор полета microsoft X SDK и Arduino. Приложение должно передавать данные через последовательный порт на Arduino борту, и я использую эти функции:Последовательный порт связи Arduino, C++
http://playground.arduino.cc/Interfacing/CPPWindows
Программа отлично работает за исключением того, что он вдруг перестает работать. Программа представляет собой цикл while (1), который непрерывно выполняет функцию, которая запрашивает данные для симулятора, а затем отправляет строку через последовательный порт. Это, как я вызвать функцию WriteData:
WriteData((char *)cadena.c_str(),8);
Будучи cadena
строковое я посылаю. Функция WriteData заключается в следующем:
bool Serial::WriteData(char *buffer, unsigned int nbChar)
{
DWORD bytesSend;
//Try to write the buffer on the Serial port
if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0))
{
//In case it don't work get comm error and return false
ClearCommError(this->hSerial, &this->errors, &this->status);
return false;
}
else
return true;
}
Я видел, что, если я комментирую всю if-else
, поэтому функция WriteFile
никогда не вызывается, программа не перестает работать и идет на отлично (за исключением того, что информация не отправляется в Arduino). Если эта строка выполнена, программа останавливается через минуту или около того. И, останавливаясь, я не имею в виду сбой или что-то еще, я просто хочу сказать, что он останавливается, консоль все еще там со всеми сообщениями, она просто перестает работать.
Что может быть?
EDIT: Хорошо, ардуино также непрерывно отправлял данные, которые никогда не читались программой, может быть, это проблема? Может ли быть так, что буфер был заполнен, а WriteFile ждал, пока на нем не будет места ?, потому что знаю, что я не пишу в сериал, кажется, что он работает нормально ...
Спасибо за ответ. Я попробую некоторых из них посмотреть, как это работает. – MyUserIsThis