我有一个C ++应用程序,该应用程序在基于Arch Linux的嵌入式Linux安装上运行。我遇到的问题是我有一个终端设备文件,可以打开以进行读写。它连接到外部串行设备。
在不挂起系统之前,与串行设备的连接非常有效。系统挂起时,我不会关闭设备文件。系统唤醒后,它会等待epoll事件从串行设备读取。它的确接收到了这些事件,但是数据包似乎是在挂起之前已经包含了旧数据,或者有时数据包中的最后一个字节似乎被“丢弃”了。请参阅下面的示例。您可能会认为我应该能够通过关闭/重新打开设备文件或通过在设备文件上运行tcflush()来从中恢复,但是这些东西似乎都没有帮助。设备文件似乎永久不同步,直到下一次冷启动为止。要暂停我要在/ sys / power / state中写入“ mem”的系统,请参见下面的配置。
睡觉前收到的最后一件事:
f1 01 01 41 40 02 01 03 01 f2
醒来时收到的第一件事:
00 01 03 01 f2 f1 01 01 41 40 02 01 03 01 f2
唤醒时实际上是通过RS232发送的:
f1 01 01 f2 f1 01 01 41 40 02 01 03 01 f2
/ sys / power / state:
mem
/ sys / power / mem_sleep:
[s2idle]
std::string m_DeviceName = ""/dev/ttymxc1""
m_FileDescriptor = open(m_DeviceName.c_str(), O_RDWR|O_NOCTTY|O_CLOEXEC);