我使用C语言和Linux作为我的编程平台。现在我正在学习一些嵌入式编程。我使用POS设备进行练习,而我的主机是使用cygwin的Windows操作系统。
我创建了一个简单的应用程序,它将在目标设备上运行,读取串行端口中的数据;在主机端,我创建一个简单的应用程序,将数据写入串行端口。现在我的问题是,当我发送缓冲区末尾没有0x0a(LN)的数据时,目标设备将无法接收该数据。但我不确定这是不是已经发送了。但当我将0x0a(LN)放在要发送的缓冲区的末尾时,目标设备将接收该数据。
我是否错过了我的应用程序的某些配置?或者将0x0a字节放在tx缓冲区的末尾是正确的方式。
谢谢
发布于 2010-07-06 10:29:54
听起来你的串行端口(实际上是Linux的“终端设备”)可能处于行缓冲模式。当使用tcsetattr设置它时,一定要清除c_lflag (你不想要ICANON)。您还应该检查影响CRLF和NL之间转换的输入/输出标志,因为您可能也不想要这种行为。默认终端设置面向用户/应用程序交互,而不是数据传输。
发布于 2010-07-06 10:28:14
听起来像是在做行缓冲。在发送数据后执行刷新。
https://stackoverflow.com/questions/3183122
复制相似问题