我有一个问题,我似乎无法弄清楚:
我的RPi和我的PC之间通过蓝牙与Putty进行了串行通信。 我使用以下代码将文本从我的RPi发送到Putty:
ssize_t serial::writeSerialPort(char const *string)
{
/*
write a string to the serial connection
*/
ssize_t result = write(fd, string, strlen(string));
tcflush(fd, TCOFLUSH);
if (result != strlen(string))
printf("Failed to write to serial port!\n");
else
printf("Wrote to serial port!\n");
return result;
}
现在奇怪的是,有时文本会被发送到Putty并且有效。 然后突然它停止工作,一段时间后它再次开始工作(全部在同一个会话中)。
当我设置断点并调试我的代码时,文本总是在write()
函数之后(tcflush()
之前)输出。
这当然很难找出为什么我有这个" bug"。
结果总是等于strlen(string)
所以我非常确定它写得正确。
有谁能指出我正确的方向?
答案 0 :(得分:1)
我不确定你想通过tcflush(fd, TCOFLUSH);
实现什么目标。该函数专门调用丢弃 - 即放入垃圾桶 - 所有数据都写入fd
,但尚未通过串行链接发送。
tcflush()
丢弃 写入fd
引用的对象但未传输的数据,或接收但未读取的数据,具体取决于价值queue_selector
:
TCOFLUSH
刷新已写入但未传输的数据。
也许您想要使用tcdrain()
代替:
tcdrain()
等待,直到发送了fd
引用的对象的所有输出。