好的,我有问题。我正在编写一些使用微软飞行模拟器 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 的事实)。如果该行被执行,那么程序会在一分钟左右后停止。停止我并不是指崩溃或任何事情,我只是说它停止了,控制台仍然存在所有消息,它只是停止工作。
会发生什么?
编辑:好的,arduino 还在连续发送程序从未读取过的数据,这可能是个问题吗?可能是缓冲区已满,WriteFile 正在等待空间写入它?,因为知道我不写入串行,它似乎工作得很好......