我正在创建一个串行端口应用程序,其中创建两个线程,一个是写入器线程,它将数据写入串行端口,另一个是读取器线程,它将从串行端口读取数据。我知道如何打开、配置、读取和在串口上写入数据但如何使用线程来完成。
我正在使用 LINUX(ubuntu) 并尝试用 C 语言打开 ttyS0 端口编程。
最佳答案
我过去执行此操作的方法是使用 0 的 VMIN 和 5 十分之一的 VTIME 设置异步 I/O 端口。这样做的目的是让线程注意到应用程序何时关闭,因为它可以尝试读取、超时、检查退出标志,然后尝试读取更多内容。
这是一个读取函数的示例:
size_t myread(char *buf, size_t len) {
size_t total = 0;
while (len > 0) {
ssize_t bytes = read(fd, buf, len);
if (bytes == -1) {
if (errno != EAGAIN && errno != EINTR) {
// A real error, not something that trying again will fix
if (total > 0) {
return total;
}
else {
return -1;
}
}
}
else if (bytes == 0) {
// EOF
return total;
}
else {
total += bytes;
buf += bytes;
len -= bytes;
}
}
return total;
}
写入函数将如您所期望的那样。
在您的设置函数中,请确保设置:
struct termios tios;
...
tios.c_cflag &= ~ICANON;
tios.c_cc[VMIN] = 0;
tios.c_cc[VTIME] = 5; // You may want to tweak this; 5 = 1/2 second, 10 = 1 second, ...
...
关于c - 如何使用线程读写串口数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326255/