わかりました、問題が発生しました。Microsoft Flight Simulator X SDK と Arduino を使用するものをプログラミングしています。アプリケーションは、シリアルポートを介してarduinoボードにデータを送信することになっています。私はこの関数を使用しています:
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 に送信されないという事実を除いて)。その行が実行されると、プログラムは約 1 分後に停止します。停止とは、クラッシュなどを意味するのではなく、停止することを意味するだけです.コンソールはすべてのメッセージとともにまだそこにあり、動作を停止するだけです.
何が起こっているのでしょうか?
編集: わかりました、arduino は、プログラムによって読み取られることのないデータを継続的に送信していましたが、それは問題になる可能性がありますか? バッファがいっぱいで、WriteFile がそれに書き込むスペースを待っていたのではないでしょうか?シリアルに書き込んでいないことを知っているので、問題なく動作しているようです...