gpt4 book ai didi

c - 文件描述符有效,但调用 read() 返回 -1

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:39 24 4
gpt4 key购买 nike

我的项目使用 ARM 开发板上的串口。

旧版开发板 (TS-7800) 继续工作。我必须升级到较新版本的开发板 (TS-7800-V2) 才能完成项目。

在新板上,我可以为串口打开一个文件描述符,但是当我从串口读取时,返回-1。这是打开文件的代码:

gps_fd = initPort("/dev/ttts4", "COM3", O_RDWR, B19200);

那是main.c中的一个函数调用。这里是

initPort()

int initPort( char *port, char *name, int oflags, speed_t baudRate ){
int fd; //File descriptor
fd = open(port, oflags); //Open the port like a file
printf("fd = %d\n", fd); //Print file descriptor to terminal
assert(fd > 0); //Open returns -1 on error

struct termios options; //Initialize a termios struct
tcgetattr(fd, &options); //Populate with current attributes
cfsetospeed (&options, baudRate); //Set baud rate out
cfsetispeed (&options, baudRate); //Set baud rate in (same as baud rate out)
options.c_cflag &= ~CSIZE; //Clear bit-length flag so it can be set
//8N1 Serial Mode
options.c_cflag |= CS8; //Set bit-length: 8
options.c_cflag &= ~PARENB; //Set parity: none
options.c_cflag &= ~CSTOPB; //Set stop bit: 1
options.c_cflag &= ~CRTSCTS; //Set flow control: none

options.c_iflag &= ~ICANON; //Enable canonical input
options.c_cflag |= (CLOCAL | CREAD); //Enable receiver, and set local mode
tcsetattr(fd, TCSANOW, &options); //Set new attributes to hardware
return fd;
}

fd (gps_fd) 返回一个“3”,这是一个很好的fd。我正在使用的另一个应用程序为 fd 返回“15”,这也很好。执行串口读取:

bytesRead = read(gps_fd, buf, sizeof(buf) - 1);

使“bytesRead”为-1。放入打印“输入/输出错误”的“错误”行。

我运行的代码与我在早期版本的开发板上运行的代码相同,并且设备名称 (/dev) 没有改变。还有什么我应该寻找的会导致端口无法读取的东西吗?

最佳答案

谢谢大家评论,让我增长知识!事实证明,FPGA(向电路板提供硬件 UART)已关闭。这是一 block 仍在开发中的新板,这是设计人员已经意识到的问题,并且他们正在努力解决这个问题。如果您发现自己处于类似情况,请与电路板制造商保持联系。这款来自 Technologic Systems 的单板计算机 (TS-7800-V2) 非常棒,他们提供出色的客户服务。

关于c - 文件描述符有效,但调用 read() 返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47147381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com