好的,我遇到了问题。我正在编写一些使用微软飞行模拟器X SDK和Arduino的东西。应用程序应该通过串口发送数据到arduino板,我正在使用这个函数:
http://playground.arduino.cc/Interfacing/CPPWindows
该程序完美无缺,但突然停止工作。程序是循环,而(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正在等待空间写入吗?因为知道我没有写入串口,它似乎工作得很好......
答案 0 :(得分:0)
当发送缓冲区填满容量时,WriteFile()将停止。只有在正确设置握手时才会清空。电气连接DSR和CTS信号,这些信号往往会被Arduino跳过。或者通过禁用握手,SetCommState()函数。使用SetCommTimeouts()设置超时是添加一些最小错误恢复的另一个不错的策略。
不读取Arduino发送的数据也没有得分很多。最好逐步实现这一点,这样你就可以专注于一次解决一个问题。然而,它通常不会阻止PC传输数据,模拟握手接线错误。