v3s串口连接传感器,读取传感器数据时候出错
-
大佬们,我用v3s串口连接传感器,读取传感器数据时候出错,read(): Resource temporarily unavailable,网上说加select,我加了没用,怎么回事啊
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <sys/select.h> #include <termios.h> #include <stdlib.h> #include <unistd.h> #include <stdbool.h> #include <errno.h> #define SENSOR "/dev/ttyS2" int main() { int fd,ret; struct termios option; char cRest[]={0xFE, 0x01, 0x0d, 0x8A, 0x80, 0x0d}; char cPower_On[]={0xFE, 0x01, 0x0d, 0x0A, 0x00, 0x0d}; char cTem[10]; fd_set rset; struct timeval timeout; int rv; fd = open(SENSOR,O_RDWR | O_NONBLOCK); if(fd < 0) { perror("open()"); return -1; } if(fd > 0) { printf("uart2 open successfully!\n"); } /*配置串口*/ memset(&option, 0, sizeof option); option.c_iflag = IGNPAR; option.c_cflag = B460800 | HUPCL | CS8 | CREAD | CLOCAL; option.c_cc[VTIME] = 0; option.c_cc[VMIN] = 10; ret = tcsetattr(fd, TCSANOW, &option); if (ret < 0) { printf("set USART2-352 failed\n"); return -1; } printf("USART2-352 is opened successfully! \n"); /*配置传感器*/ write(fd,cRest,6); sleep(1); write(fd,cPower_On,6); while(1) { // FD_ZERO(&rset); // FD_SET(fd,&rset); // // timeout.tv_sec = 5; // timeout.tv_usec = 0; memset(cTem, 0, 10); // rv = select(fd+1,&rset,NULL,NULL,&timeout); // if(rv < 0){ // perror("select error"); // continue; // } // else if(rv == 0){ // perror("select timeout"); // continue; // } // else // { ret=read(fd,cTem,10); if(ret < 0) { perror("read()"); close(fd); break; } if(ret > 0) { printf("read data : %s\n",cTem); } //} } close(fd); return 0; }
这是程序,编译没问题,运行成这样
-
先把你的程序在x86上编译测试能不能打开并通讯,如果可以,说明v3s这个串口驱动有问题
-
你好。
在控制台中运行命令:
echo 12345 >/dev/ttyS2如果答案是这样的:
write error: Input/output error这意味着问题不在于您的程序,而在于驱动程序。
需要在控制台查看 dmesg 命令的输出
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号